我遇到一个绑定到全局变量的函数有问题:
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");