2012-03-22 15 views
2

を移入した後、私はこのように感じるバインディングが以前に頼まれている必要がありますが、私はKnockoutjs:リフレッシュ選択リスト

を見てきました

しかし、これらの問題は私が直面しているものではありませんでした。

私の見解では、私はajax呼び出しからビューモデルを受け取ります。そのオブジェクトには国IDがあります。その後のajax呼び出しでは、国(名前とID)のリストを取得し、リストから選択ボックスに値を設定します。

選択ボックスが

<select data-bind="value: CountryId"/> 

を使用してのviewmodelの国のIDにバインドされている。しかし、私はドロップダウンを移入する場合、のviewmodelの国が事前に選択されていません。手動でko.applyBindings(vm)を呼び出す必要があります。これは、データがカスケードされた選択ボックスを処理するjQueryプラグインから読み込まれるためです。それはviewmodelへの参照を持っていません(私はそれを提供しません)。私はコールバックを公開することができますが、それは少し夜明けです。

私はを作成しました。これはこの問題をより明確に示しています。テスト選択ボタンをクリックすると、ドロップダウンがアイテム0にあらかじめ選択されていることがわかります。jsパネルの行のコメントを外し、Bobさんのおじさんのコメントを外します。

ここには何がありますか?これは基本的なノックアウト機能ではありませんか?

-Jules

+0

あなたがしようとしていることをやり遂げることはできないと思います。値バインディングは、新しいオプションを選択したときに反応するように、選択のためのリスナーを「変更」に設定します。選択肢にオプションを追加するだけなので、Knockoutには何もする必要がないことが分かりません。たとえそれがわかっていても、値が0にリセットされます。オプションでは、選択されている行が指定されていないため、0が選択されます。 –

+0

私はあなたが正しいかもしれないと思います。私は今、コールバックの仕組みに行ってきましたが、私はそれに問題を抱えています。新しい情報で質問を更新しました。 –

+0

スクラッチ、私は二次的な問題を解決しました。まもなく、この質問への回答が掲載されます。 –

答えて

2

John Earles氏によると、選択リストに項目を追加しても「変更」イベントは発生しません。私はそれが実際に良いことだと結論づけました。

バインディングは、DOMイベントを捕捉し、それに対応してviewmodelプロパティを更新します(本当に良い)。

これは、私が望むものとは逆の動作です。だから私はコールバックに立ち往生した。現在、applyBindings()を呼び出しています。元のフィドル(明確にするためにコールバックなどは省略されています)のthis revisionの例を見ることができます。

0

あなたはこのような何かを行うことができますが、あなたはビューモデルにアクセスする必要があります。あなたは人口持つまでコンディショニングオフを選択することで

http://jsfiddle.net/jearles/nw4cH/36/

は、あなたが評価するからそれを防ぐためにobservableArray(後の呼び出しで)

+0

うーん、興味深い。確かに私はコメントに論理を入れるという考えが好きです! 選択リストにデータが入力された後、新しい値のセットが再投入された場合、この動作はどのようになりますか? –

+0

"コンテナレス"構文を使用する必要はありません...コンテナdivに "if"を追加することもできます。選択リスト項目が変更された場合、ノックアウトはバインディングを再評価します。私は構文を表示するために私の例を更新し、2番目の更新とクリアボタンを追加しました。 http://jsfiddle.net/jearles/nw4cH/77/ –

+0

これは素晴らしい例です。ありがとうございます。あなたが見ることができるように、2番目の更新では、DOM-> viewmodel(選択されたアイテムは5に変更されます)からのバインディングの更新ではなく、別の方法で更新されます。私は手動のアプローチを今のところ行ってきました。何が起こっているのかを私に見せていただきありがとうございます。私は答えとして上記OPにあなたのコメントをマークしたいが、StackOverflowはオプションとしてそれを持っていないのですか? –

関連する問題