【问题标题】:How to handle the initial value of a dojo.Stateful widget?如何处理 dojo.Stateful 小部件的初始值?
【发布时间】:2013-07-21 09:46:33
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript widget dojo


    【解决方案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...
      }
    });
    

    【讨论】:

      猜你喜欢
      • 2014-08-15
      • 2020-11-28
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 2017-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多