2017-01-19 13 views
0

В одном из моих шаблонов У меня есть следующий узел:Как я могу получить дескриптор объекта для набора узлов Dojo с помощью data-dojo-attach-point?

<input data-dojo-attach-point="checkboxIsInternal" type="checkbox" checked /> 

Я хочу, чтобы изменить значение другого свойства в классе шаблона до определенного значения, когда эта проверка изменяются. Поэтому я решил модифицировать getter и setter для свойства valuebox checkboxIsInternal, чтобы это произошло автоматически. Например:

Object.defineProperty(this.checkboxIsInternal, 'value', { 
    get: function() { return (this.clientType == 'I'); }, 
    set: function(v) { this.clientType = (v == 'on' ? 'I' : 'E'); }, 
    enumerable: true 
}); 

но это не сработало. Поэтому я попытался console.log дескрипторы свойства значения с

console.log(Object.getOwnPropertyDescriptor(this.checkboxIsInternal, 'value')); 

но оно показало undefined. Кто-нибудь знает почему?

Если есть какой-либо другой способ сделать это (изменение одной переменной на основе изменения узла), пожалуйста, дайте мне знать.

ответ

2

Я не знаю, работает ли Object.defineProperty по значению входного элемента. Если это так, то что вы делаете, это создание/извлечение свойств expando в самом флажке, и вы хотите их избежать.

this.checkboxIsInternal должен быть ссылкой на ваш элемент флажка, если все настроено правильно. Возможно, попробуйте старомодный способ.

this.checkboxIsInternal.onchange = (function(e) { 
    this.clientType = (this.checkboxIsInternal.checked) ? "I" : "E"; 
}).bind(this); 

Это обновит свойство «clientType» в виджете, когда флажок установлен/снят.

+0

Я Я попробую в понедельник и вернусь к вам. Благодарю. –

1

Виджеты Dijit предоставляют возможность писать пользовательские сеттеры и геттеры, логика которых выполняется при вызове метода set и get.

методы Пользовательские инкубационных определяются по образцу _setFooAttr, где «Foo» является имя свойства:

declare(_WidgetBase, { 
    foo: "", 
    _setFooAttr: function (value) { 
     // custom logic, and update the foo property 
    } 
}); 

Аналогичным образом для можно назвать пользовательский геттер:

yourWidget.getFooAttr(); 
+0

Это не помогает, потому что этот метод вызывается только в конструкции виджета. И мне нужно, чтобы это вызывалось каждый раз, когда чек был изменен. В любом случае я решил это с событиями. Но спасибо за ваш ответ. –

+0

@NelsonTeixeira никаких проблем, которые вам нравятся :) – GibboK

 Смежные вопросы

  • Нет связанных вопросов^_^