我正在使用dijit.form.Select小部件。由于所有dojo小部件都基于dojo.Stateful,因此可以监视属性更改。我正在跟踪Select小部件的value
属性,一切正常。例如:
this.select.watch("value", lang.hitch(this, function (attr, oldVal, newVal) {
...
但是当widget的value
属性发生变化时,这种方法可行。但是如何为窗口小部件的初始值调用相同的函数(watch
方法的第二个参数)(当oldVal未定义时)?默认情况下,watch
在这种情况下不会被触发。
答案 0 :(得分:1)
正如您所说,加载小部件时,您的监视功能不会触发。但是,如果你需要使用Select的初始值调用你的函数,你可以事先定义你的函数,然后在这两个地方使用它:
var myFunction = function(attr, oldVal, newVal) {
// Do something useful
}
var initVal = this.select.get("value");
myFunction(null, null, initVal);
this.select.watch("value", lang.hitch(this, myFunction));
或者,您可以从dijit/form/Select
扩展自定义窗口小部件并覆盖其_setValueAttr
函数。在Select小部件启动时,将使用初始值调用此方法。
var CustomSelect = declare(Select, {
_setValueAttr: function(val) {
this.inherited(arguments); // Allow dojo to handle the complex Select widget logic
// Do custom stuff with val...
}
});