下にinput
検索フィールドと Twitter ブートストラップ ドロップダウンがあります。
ユーザーがinput
フィールドに何かを入力すると (値を持つ Emberinput
ヘルパーcustomerSearchQuery
)、コントローラーには計算されたプロパティがあり、ドロップダウンに入力する代替の配列を返します。ビューには、ドロップダウンを処理するメソッドもあります。これは、フィールドがフォーカスactive
されたときにキーボードでドロップダウンをナビゲートするために後で使用される配列の最初の要素にクラスを設定します。input
ビュー階層は次のようになります。これらはすべて同じコントローラーを使用します。
Care.NavbarView = Ember.View.extend({
controller: Care.NavbarController.create(),
templateName: 'navbar',
CustomerSearchView: Ember.View.extend({
selectedSearchMatch: 'ean',
searchStateLoading: false,
searchStateSuccess: false,
searchStateFail: false,
SearchMatchesView: Ember.View.extend({
tagName: 'li',
classNameBindings: ['isActive:active'],
setSelectedSearchMatchToFirst: function() {
console.log(this.get('controller').get('customerSearchQuery'))
}.observes('controller.customerSearchQuery'),
isActive: function() {
return this.get('content.value') === this.get('parentView.selectedSearchMatch')
}.property('content', 'parentView.selectedSearchMatch')
})
})
})
問題は、オブザーバー ( setSelectedSearchMatchToFirst
) が常に起動するとは限らず、計算されたプロパティ (this.get('customerSearchQuery')
その値に基づいて結果を使用して返す) が起動した場合にのみ起動することです。customerSearchQuery
それはなぜですか? また、入力フィールドが変更されるたびに起動するにはどうすればよいですか?