6

JS ノックアウト ライブラリに関する質問 - 3 つの入力があり、すべて同じ変数にデータ バインドされています。2 つには false のブール値があり、1 つには true のブール値があります。(残念ながら、これらを int に変更することはできません。これにより、この問題が簡単になります)。2 つの false 値の入力は動作を共有していますが、わずかに異なる動作をトリガーするには、何らかの方法でそれらを区別する必要があります。

それぞれを異なる値で別の変数にデータバインドすることは可能ですか? だからそれぞれの存在の代わりに

    <input data-Bind="checked:test" value="false">

私は次のようなものを持っているでしょう

    <input data-Bind="test, test2" value="false, 1">

    <input data-Bind="test, test2" value="false, 2">?

私はそれを直接試してみましたがうまくいかなかったので、それが可能かどうかわかりません。本当にありがとう。

4

1 に答える 1

4

複数の変数を直接バインドすることはできませんが、カスタムバインド関数を作成することでうまくいきます。

例: http: //jsfiddle.net/gurkavcu/ePW8Y/
**入力値(true、false)を変更して、更新機能をトリガーします

HTML

<input data-bind="customData: test , v1 : test2"/>
<div>
    <span data-bind ="text : test"/>
</div>
<div>
    <span data-bind ="text : test2"/>
</div>

JS

ko.bindingHandlers.customData = {
      init: function(element, valueAccessor, allBindingsAccessor, viewModel) {  
           $(element).change(function () {
                valueAccessor()(element.value);
            });       
      },
       update: function(element, valueAccessor, allBindingsAccessor, viewModel) {
          var value =ko.utils.unwrapObservable(valueAccessor());
          var v1 = allBindingsAccessor().v1;

          if(value === "true") {
             v1("1"); 
             console.log(v1());
          }
          else  if(value === "false") {
             v1("2"); 
             console.log(v1());
          }
     }
};  


function ViewModel() {

    this.test =  ko.observable(false);
    this.test2 =  ko.observable("2");

};

$(function() {  

    var viewModel = new ViewModel();
    ko.applyBindings(viewModel); 

})​

必要に応じて更新機能を変更してください。v1:...、v2:...、v3:...を使用して、バインディングに任意の数の変数を追加し、allBindingsAccessor()。v1、allBindingsAccessor()。v2、allBindingsAccessor()。v3を介してアクセスできます。

于 2012-07-07T20:10:27.507 に答える