0

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

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

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

4

1 回答 1

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...
  }
});
于 2013-07-21T16:06:25.840 回答