如何获取具有data-dojo-attach-point的Dojo节点集的对象描述符?

时间:2017-01-19 21:58:05

标签: javascript dojo

在我的一个模板中,我有以下节点:

<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'));

但它显示未定义。谁知道为什么?

如果还有其他方法(根据节点的变化更改一个变量),请告诉我。

2 个答案:

答案 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();