1

敬礼

私は、実際に手動で値を選択するのではなく、内部で値を編集することなく、Ember.Selectボックスを編集する方法を見つけようとしています。私のEmber.Selectは次のようになります。

{{view Ember.Select 
  contentBinding="Et.router.availablePhasesController" 
  optionValuePath="content.id" 
  optionLabelPath="content.label" 
  selectionBinding="a.selectedPhase"
}}

availablePhasesControllerは次のようになります。

Et.AvailablePhasesController = Ember.ArrayController.extend({
content: [
  { id: 1, label: "1" },
  { id: 2, label: "2" },
  { id: 3, label: "3" }
 ]
});

選択ボックスからこれらの値を選択すると、これはすべてうまく機能しますが、私の質問は、Ember.Selectによって作成されたselect要素の値を変更すると、バインディングがトリガーされます。つまり、「a.selectedPhase」です。 select要素を変更するために使用される値も取得します。

.val()と.attr( "value")でjQueryを使用しようとしましたが、これはUIにのみ影響し、バインディングをトリガーしませんでした。つまり、選択ボックスには値があり、「a.selectedPhase」はありませんでした。

また、Ember.Selectビューを拡張してみたところ、現在の値を格納し、バインディングに従って更新する変数「value」があることがわかりましたが、これの使用法は見つかりませんでした。この値が変更されたときに監視するオブザーバーを作成しましたが、新しい値を手動で選択した場合にのみ変更されたため、役に立ちませんでした。

要約すると、バインディング内の変数を直接変更する以外の方法で、またはUIを介してselectionBindingをトリガーする方法はありますか?

編集:誰かがコメントで要求したように私はjsfiddleを作成しました:http://jsfiddle.net/y52Pc/2/

バインディングが正常に機能していることがわかります。選択ボックスで別のオプションを選択すると、正しく更新されます。また、2つのボタンを設定しました。1つはEmber.setメソッドを使用します。これも正常に機能し、バインディングをトリガーします。jQuery.val()を使用する他のメソッドは、UIにのみ影響し、バインディングをトリガーしません。

私が探しているのは、他の何かでバインディングをトリガーする他の方法です。次に、.setを使用するか、選択ボックスを選択して手動でバインドします。

編集2:jQueryを介してバインディングをトリガーする更新された方法をここに追加しました:http://jsfiddle.net/y52Pc/3/ これで問題が解決したようです!

4

1 に答える 1

3

を使用して select コンポーネントの値を変更するたびに$().attr()、変更イベントがトリガーされません (バインディングを更新する ember.js に対して DOM イベントが発生する必要があります)。次のように手動で呼び出す必要があります$('selector').attr().trigger('change')

于 2012-09-06T09:36:00.147 に答える