2013-04-22 50 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