对于从_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中属性的名称与注释中定义的实际属性完全不匹配,其次是与有状态文档中看到的完全不同的模式。
那是哪一个?
答案 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。下面是一个片段,它将向您展示格式之间的差异。观察结果,以及更新的方式和属性。
_setXxxxAttr
&#13;