2017-01-19 2 views
0

私は、次のノードがあります。data-dojo-attach-pointを使用してDojoノード・セットのオブジェクト・ディスクリプタを取得するにはどうすればよいですか?私のテンプレートの一

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

を私はこのチェックが変更されたときに特定の値にテンプレートのクラスの別のプロパティの値を変更したいです。だから、私はgetterとsetterにcheckboxIsInternalの 'value'プロパティを変更して、自動的にこれが起こるようにすることを考えました。このように:

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

これは機能しませんでした。だから、私はconsole.logに値プロパティの記述子を

と表示しましたが、定義されていませんでした。なぜ誰も知っていますか?

ノードの変更に基づいて1つの変数を変更する他の方法がある場合は、教えてください。

答えて

2

Object.definePropertyが入力要素の値に作用するかどうかわかりません。そうであれば、チェックボックス自体にexpandoプロパティを作成/取得し、それらを避けたいと思っています。

this.checkboxIsInternalは、すべてが正しく設定されている場合は、チェックボックスの要素への参照にする必要があります。たぶん昔ながらの方法を試してみてください。

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

このチェックボックスをオンまたはオフにすると、ウィジェットの「clientType」プロパティが更新されます。

+0

私は:カスタムゲッターを呼び出すことができるため同様に

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

カスタムsetterメソッドは、「foo」がプロパティの名前であるパターン_setFooAttr、次のように定義されていますその月曜日にやり直してみてください。ありがとう。 –

1

Dijitウィジェットは、setとgetメソッドを呼び出すときにロジックが実行されるカスタムセッターとゲッターを書く機能を提供します。

yourWidget.getFooAttr(); 
+0

このメソッドはウィジェット構築でのみ呼び出されるため、役に立たない。チェックが変更されるたびに呼び出される必要があります。とにかく私はイベントでそれを解決しました。しかし、あなたの答えに感謝します。 –

+0

@NelsonTeixeiraあなたが歓迎している問題はありません:) – GibboK

関連する問題