在我的一个模板中,我有以下节点:
<input data-dojo-attach-point="checkboxIsInternal" type="checkbox" checked />
我想在更改此检查时将模板类中另一个属性的值更改为某个值。所以我想修改checkboxIsInternal的'value'属性的getter和setter,这样就会自动发生。像这样:
Object.defineProperty(this.checkboxIsInternal, 'value', {
get: function() { return (this.clientType == 'I'); },
set: function(v) { this.clientType = (v == 'on' ? 'I' : 'E'); },
enumerable: true
});
但这没效果。所以我尝试使用
来控制.log的value属性描述符console.log(Object.getOwnPropertyDescriptor(this.checkboxIsInternal, 'value'));
但它显示未定义。谁知道为什么?
如果还有其他方法(根据节点的变化更改一个变量),请告诉我。
答案 0 :(得分:2)
我不知道Object.defineProperty是否适用于输入元素的值。如果是这样,你在做什么就是在复选框本身创建/检索expando属性,你想避免这些。
如果一切设置正确,this.checkboxIsInternal应该是对checkbox元素的引用。也许尝试老式的方式。
this.checkboxIsInternal.onchange = (function(e) {
this.clientType = (this.checkboxIsInternal.checked) ? "I" : "E";
}).bind(this);
每当选中/取消选中复选框时,这将更新窗口小部件中的“clientType”属性。
答案 1 :(得分:1)
Dijit小部件提供了编写自定义setter和getter的能力,在调用set和get方法时执行其逻辑。
自定义setter方法是在模式_setFooAttr之后定义的,其中“foo”是属性的名称:
declare(_WidgetBase, {
foo: "",
_setFooAttr: function (value) {
// custom logic, and update the foo property
}
});
以类似的方式可以调用您的自定义getter:
yourWidget.getFooAttr();