如何处理dojo.Stateful小部件的初始值?

时间:2013-07-21 09:46:33

标签: javascript widget dojo

我正在使用dijit.form.Select小部件。由于所有dojo小部件都基于dojo.Stateful,因此可以监视属性更改。我正在跟踪Select小部件的value属性,一切正常。例如:

this.select.watch("value", lang.hitch(this, function (attr, oldVal, newVal) {
...

但是当widget的value属性发生变化时,这种方法可行。但是如何为窗口小部件的初始值调用相同的函数(watch方法的第二个参数)(当oldVal未定义时)?默认情况下,watch在这种情况下不会被触发。

1 个答案:

答案 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...
  }
});