[
http://issues.apache.org/jira/browse/COCOON-1811?page=comments#action_12372922
]
Rob Berens commented on COCOON-1811:
------------------------------------
See the internal class ThreadScope in FOM_JavaScriptInterpreter.java. This
class has a locked flag to indicate that it is no longer allowed to add global
variables to the scope. This is checked in the put(String , Scriptable, Object)
method. The lock is set after the global scope of the scripts has been loaded
and thus before any methods in the scripts are executed.
Also the statement:
function myObject()
is implicitly interpreted as the the declaration of the var myObject and
therefore the before mentioned put method will throw an exception when a script
containing this statement is loaded fromt within the method in another script:
main.js:
cocoon.load("myScript1"); // when called from here no problem.
Alternatively:
main2.js:
function someMethod() {
cocoon.load("myScript1"); // when called from here exception is thrown
}.
> [PATCH] Flow Script: Allow dynamic loading of JavaScript objects even when
> scope is locked
> ------------------------------------------------------------------------------------------
>
> Key: COCOON-1811
> URL: http://issues.apache.org/jira/browse/COCOON-1811
> Project: Cocoon
> Type: Improvement
> Components: Blocks: Forms
> Versions: 2.2-dev (Current SVN), 2.1.9-dev (current SVN)
> Reporter: Rob Berens
> Priority: Minor
> Attachments: FOM_JavaScriptInterpreter.txt
>
> Currently it is not possible to add variables to the scope of a
> FOM_JavaScriptInterpreter, unless the scope is not locked yet or when still
> in the main loading process or when loading native java classes. Therefore it
> is not possible to dynamically load JavaScript classes like the one below:.
> -------------------------------
> function myObject() { // at this point the current
> implementation throws the exception
> // constructor for myObject
> }
> myObject.prototype.myMethod = function() {
> // implementation of myMethod
> }
> -------------------------------
> from within a script fragment like this one:
> -------------------------------
> function loadScript() {
> var scriptURI = "determineScriptURIFromRequest";
> cocoon.load(scriptURI);
> }
> -------------------------------
> The attached patch solves this by allowing also objects of the type
> org.mozilla.javascript.Function to be loaded into a locked scope.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira