JS:函数在全局变量中定义但未计算

时间:2012-05-11 13:07:51

标签: javascript

我遇到一个绑定到全局变量的函数有问题:

var reloadRules;

dojo.ready(function(){
   reloadRules = function(){
        // Create a new store with all rules of the current rule-set
        var rule_store = new dojo.data.ItemFileWriteStore({
            url: "./RDB?id=all&set_name="+CURRENT_RULE_SET.replace("#", "%23"),  // hashes need to be changed in URLs
            id:  "RDB_store",
            jsId: "RDB_store"
        });
        // Use the new store
        grid.setStore(rule_store);
   } // end function

   //more code

}); // end dojo.ready()

通过在同一个dojo.ready块中定义的按钮调用时:

// Create the reload button programmatically:
var reload_rdb = new dijit.form.Button({
    label: "Reload RDB [R]",
    onClick: reloadRules
}, "reload");
一切都很好!但是,当通过以下方式在块外调用它时:

reloadRules();

它不会。使用以下命令将其打印到控制台:

console.log(reloadRules);

虽然给了我功能上限..

同样奇怪的是,即使在dojo.ready块中调用函数也是如此:

 // Connect the 'R'-key to reloadRule
 dojo.connect(dojo.byId('browser_grid'), "onkeypress", function(event){
     if (event.which == 114 || event.keyCode == 114 || event.which == 82 || event.keyCode == 82) {
         reloadRules();
         return false;
     }
     return true;
 });

不起作用。因此,只有参考该功能似乎才有效。

-

PS我有更多类似的功能(newRule,editRule等),这些功能在按下右快捷键或从其他地方调用时都被触发。我很难过为什么不这样做。

为了完整起见,另一个有效的功能的例子是:

newRule =  function(){
                  // Clear the editor fields
                  clearEditor();
                  // Go to the editor tab
                  dijit.byId('program').selectChild(dijit.byId('editor'));
                } // end function

var new_rule = new dijit.form.Button({
    label: "New rule [N]",
    onClick: newRule
}, "new_rule");

0 个答案:

没有答案