2013-04-22 25 views
0

我做一個簡單的自定義綁定,它接受一個簡單的觀察到的,並增加了可觀察的值到綁定元素的CSS類列表,像這樣:傳遞多個值/觀測到自定義綁定

<div class="container" data-bind="cssClassBinding: state"> 
</div> 

ko.bindingHandlers.cssClassBinding = {//simplified example code 
    init: function (element, valueAccessor) { 
     $(element).addClass(ko.utils.unwrapObservable(value)); 
    }, 
} 

什麼我試圖做的是能夠綁定多個值與此綁定。我試着用另一個不同的值綁定另一個綁定,但KO顯然只評估每個元素的一個實例。

//won't work 
<div class="container" data-bind="cssClassBinding: state, cssClassBinding: type"> 
</div> 

所以我想看看我能做到這一點更是這樣的:

<div class="container" data-bind="cssClassBinding: {state, type}"> 
</div> 

ko.bindingHandlers.cssClassBinding = {//simplified example code 
    init: function (element, valueAccessor) { 
     foreach (observableValue in iDon'tKnowWhere) 
      $(element).addClass(ko.utils.unwrapObservable(observableValue)); 
    }, 
} 

任何想法?

回答

1

我發現最簡單的辦法就是處理觀測的結合數組,像這樣:

<div class="container" data-bind="cssClassBinding: [state, type]"> 
</div> 

而且只寫自定義綁定來檢查它是否是一個數組或不是。

+0

你能解釋一下怎麼做嗎? – 2017-09-29 11:09:47

2

結合多個觀測的另一種方法是創建內的對象的結合:

<div data-bind="exampleBinding: { State: state, Type: type }"></div> 

然後,自定義綁定將通過valueAccessor訪問這些屬性(假定上視圖模型狀態和值是敲除可觀察):

ko.bindingHandlers.exampleBinding = { 
    init: function (element, valueAccessor) { 
     var value = valueAccessor(); 
     // read properties 
     console.log(value.State()); 
     console.log(value.Type()); 
     // update properties 
     value.State('test1'); 
     value.Type('test2'); 
    } 
} 
+0

現在試着做這個,讓我瘋狂。 我的數據綁定是這樣的:data-bind =「htmlEditor:{note:model.note,state:model.state}」 在我的視圖模型中,我設置了以下內容 - self.note = ko.observable (params.model.note()); self.state = ko.observable(params.model.planState()); 上面返回值我尋找,所以我不認爲問題在那裏。 – 2017-09-29 11:11:06

+0

我的初始嘗試嘗試了很多方法無濟於事 - init:function(element,valueAccessor)var modelProperty = valueAccessor(), // propertyValue = ko.unwrap(modelProperty.note()); propertyValue = ko.unwrap(modelProperty); // var stateProperty = valueAccessor(), // stateValue = ko.unwrap(modelProperty.state()); alert(「val =」+ propertyValue); // alert(「state =」+ stateValue); 我到底做錯了什麼? – 2017-09-29 11:15:34

+1

@TerryDelahunt Terry,你可能想在jsfiddle.net上添加你的例子來看看這裏發生了什麼。在你的評論中,它看起來像你的標記綁定到model.note(爲了這個工作,你的視圖模型需要一個名爲「model」的對象,然後包含註釋和狀態屬性)。看起來你的視圖模型在根級別只有音符和狀態屬性(不嵌套在名爲model的對象下)。 – mcdermott7run 2017-10-01 17:03:24

相關問題