0

ドロップダウン コンポーネントで動作するように、オプションと値のバインディングを最終的に取得しました。値の applyBinding の後のすべての JavaScript が実行されないことを除いて、私が今持っているものは機能します。一度にページにドロップダウンが 1 つしかない場合、これは問題ではありません。

ただし、ほとんどの場合、複数を使用する必要があります。このようなページでスクリプトを実行すると、最初のドロップダウンの applyBinding が実行されて停止します。それ以上のスクリプトは実行されず、最初のドロップダウンのみが機能します。

どうしてこれなの?さらに重要なことに、どうすれば修正できますか?

関連するコード行は次のとおりです。

$(function () {      
  var $thisdd = $("#@ddname");  //the JQuery selector for my dropdown       
  var dropdownItems = getDropdownItemsFromDl("@ddname");       
  var newitem = ko.observable({ cname: ddcname, cvalue: ko.observable($thisdd.val()), cpublishtopic: "" });      
  classificationsViewModel.push(newitem());       
  var viewModel =     
    {         
      dditems : dropdownItems      
    };    
  $("#@ddname").attr("data-bind", "value: classificationsViewModel()[" + classificationsViewModel.indexOf(newitem()) + "].cvalue, options: dditems, optionsText: 'value', optionsValue: 'key'");   
  ko.applyBindings(viewModel);   
  ko.applyBindings(classificationsViewModel()[classificationsViewModel.indexOf((newitem())].cvalue); 
}); 
4

1 に答える 1

0

を呼び出すとko.applyBindings、Knockoutはモデルをドキュメント全体に適用します。これは、ページ全体に1つのモデルがある場合に最適です。

ドロップダウンごとに1つのモデルが必要なようです。http://knockoutjs.com/documentation/observables.html#activating_knockoutのオプションのパラメーターを参照してください

次に、次のような方法で各ドロップダウンに個別のモデルをバインドできます。ko.applyBindings(viewModel, $('#@ddname')[0]);

この宣伝文句が何をしようとしているのかわかりません。

value: classificationsViewModel()[" + classificationsViewModel.indexOf(newitem()) + "].cvalue

ドロップダウンを制御するために2つの異なるモデルを使用しようとしているようです。私はそれがうまく終わらないことをかなり確信しています。1つのモデルを使用してすべてをルール化し、すべてのドロップダウンを処理してみてください。保守と論理化がはるかに簡単になると思います。

于 2012-08-21T22:45:25.490 に答える