コードの匂いのように見えるので、これがここでの最善の方法であるかどうかを理解しようとしています。私がやりたいことは、ボタンをクリックすると読み込み中の状態に変わり、コントローラーがイベントの処理を終了するとデフォルトの状態に戻ることです (基本的には AJAX 呼び出しを行います)。
私のテンプレートは次のようになります。
{{#view App.LoadingButton action="search" data-loading-text="content.loadingText"}}Search{{/view}}
私の見解は次のようになります。
App.LoadingButton = Ember.View.extend({
tagName: 'button',
classNames: ['btn', 'btn-primary'],
attributeBindings: ['type'],
type: 'button',
elem: null,
stateChanged: function () {
if (this.elem) {
var loading = this.get('controller').get('content.isLoading');
if (loading) {
$(this.elem).button('loading');
}
else {
$(this.elem).button('reset');
}
}
},
click: function (evt) {
this.elem = this.elem || evt.srcElement;
this.get('controller').send(this.get('action'));
},
didInsertElement: function () {
this.get('controller').addObserver('content.isLoading', this, 'stateChanged');
}
});
- まず、要素にアクセスする方法が間違っているように見えます。ビューの要素が DOM に追加されているときに、ビューの要素への参照を取得できませんか?
- 第二に、モデルから isLoading ブール値フラグを変更するためにコントローラーに依存しているため、ビューはいつ状態を変更するかを認識します。これは、Ember の方法で実装する最良の方法ですか?
Ember の実装を始めたばかりのビデオをたくさん見てきましたが、このようにうまくいくかもしれませんが、何が最善のアプローチであるかを知るのはまだ簡単ではありません。