2012-07-07 35 views
4

關於產品JS敲除文庫 - I有三個輸入端,所有的數據綁定 - ED到相同的變量。兩個布爾值爲false,另一個布爾值爲true。 (不幸的是,我不能將它們更改爲整數,這會使這個問題更容易)。雖然兩個錯誤價值的投入共享行爲,但我需要區分它們以某種方式觸發稍微不同的行爲。淘汰賽JS - 數據綁定多個值

是否有可能每另一個變量數據綁定,具有不同的值?因此,不是每個被

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

我會像

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

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

我想,直接和沒有工作,所以我不知道這是否是可能的。非常感謝。

+0

所以,這些都不綁定是有效的,而且我不完全知道你正在嘗試做的,或者你怎麼想到這個的行爲。如果'test1'的值更新,並且與'test2'不匹配,你想要發生什麼?你可能可以通過計算observables來實現這一點,但是你不能綁定到像這樣的兩個屬性。我不知道你爲什麼想要。 – Tyrsius 2012-07-07 00:58:42

回答

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); 

})​ 

修改更新功能f或您的需求。您可以使用v1:...,v2:...,v3:...將任意數量的變量添加到綁定中,然後通過allBindingsAccessor()訪問它。v1,allBindingsAccessor()。v2,allBindingsAccessor()。v3