DOJO:覆盖Dijit小部件中的方法

时间:2014-01-31 20:02:56

标签: javascript dojo override

我需要将一些参数传递给小部件 watch 方法,以便可以在 CallBack函数

中使用它

当前代码:

require(["dijit/form/NumberTextBox"], function (NumberTextBox) {
    var txt = new NumberTextBox({}, "text10");
    txt.watch("value", function (name, oldValue, value) {

    });
});

所需代码:

require(["dijit/form/NumberTextBox"], function (NumberTextBox) {
    var txt = new NumberTextBox({}, "text10");
    txt.watch("value", function (name, oldValue, value, PanelID) {
        alert(PanelID);
    },PanelID);
});

需要在watch功能中引入PanelID。我搜索了文档,但似乎我们无法将参数传递给Watch函数。 有没有办法覆盖Watch方法并让它接受参数?

1 个答案:

答案 0 :(得分:1)

您可以将回调函数包装在closure中,以便它保留对PanelID变量的本地引用。这假定PanelID不是要在watch函数的调用中更改的内容。

require(["dijit/form/NumberTextBox"], function (NumberTextBox) {
    var txt = new NumberTextBox({}, "text10");
    var PanelID = ... // comes from somewhere

    (function (panelId) {
        txt.watch("value", function (name, oldValue, value) {
            alert(panelId);
        });
    })(PanelID);
});

watch函数的回调函数会创建一个闭包,因此您可以将上述代码简化为:

require(["dijit/form/NumberTextBox"], function (NumberTextBox) {
    var txt = new NumberTextBox({}, "text10");
    var PanelID = ... // comes from somewhere

    txt.watch("value", function (name, oldValue, value) {
        alert(PanelID);
    });
});