如何为自定义小部件定义自定义getter和setter? - 道场

时间:2016-08-10 14:03:57

标签: javascript dojo

对于从_WidgetBase继承的自定义窗口小部件,定义自定义getter和setter的模式是什么?我的困惑是在dojo Stateful(据说由_WidgetBase继承)的文档中,它定义了以下模式

fooBar: null,
_fooBarGetter: function(){
  return this.fooBar;
},
_fooBarSetter: function(value){
  this.fooBar = value;
},

所以一般_xxxGetter和_xxxSetter 其中xxx是属性的确切名称

但是在_WidgetBase的文档中,示例中显示的模式如下所示

// for the field "foo" in your widget:

// custom getter
_getFooAttr: function(){ /* do something and return a value */ },

// custom setter
_setFooAttr: function(value){ /* do something to set a value */ }

首先,getter / setter中属性的名称与注释中定义的实际属性完全不匹配,其次是与有状态文档中看到的完全不同的模式。

那是哪一个?

1 个答案:

答案 0 :(得分:2)

如果您要创建dijit / widget,则继承OutOfMemoryError=<java.lang.OutOfMemoryError: Requested array size exceeds VM limit> 'Finally' clause triggered 。您需要遵循_WidgetBase的文档。

如果您要创建一个继承_WidgetBase模块(不是dijit)的模块,那么请按照Stateful的文档进行操作。

为了澄清您的疑问,Stateful自定义getter / setter会覆盖_WidgetBase的方法。因此,如果您要创建窗口小部件,则需要自定义的getter / setter格式为Stateful / _getXxxxAttr

<强>更新 问题不在于自定义setter的格式。即使您没有自定义的getter / setter,setter也会设置该值。它将创建一个新属性并存储该值。如果目标只是将值存储为对象中的属性,则不需要自定义setter / getter。但这不是一个好的编码标准(不打算在这里辩论)。

如果由于更新属性而有其他更改或事件,则需要按照文档中的说明使用自定义getter或setter。下面是一个片段,它将向您展示格式之间的差异。观察结果,以及更新的方式和属性。

&#13;
&#13;
_setXxxxAttr
&#13;
&#13;
&#13;