我正在使用淘汰赛2.2.1。 我有一组3个复选框来连接,以获得相应的值一起:如何将复选框数组传递给淘汰赛自定义绑定?
<fieldset data-role="controlgroup" id="top-colours" data-bind="topColoursLabel: { topColoursRed,topColoursBlue,topColoursGreen }">
<legend>Top Colours:</legend>
<input type="checkbox" name="top-colours-red" data-bind="checked: topColoursRed" id="tc-check-1" />
<label for="tc-check-1">Red stripes</label>
<input type="checkbox" name="top-colours-blue" data-bind="checked: topColoursBlue" id="tc-check-2" />
<label for="tc-check-2">Blue stripes</label>
<input type="checkbox" name="top-colours-green" data-bind="checked: topColoursGreen" id="tc-check-3" />
<label for="tc-check-3">Green stripes</label>
</fieldset>
结果应是例如:“红纹,蓝纹”。 我的视图模型如下:
function ColoursViewModel() {
var self = this;
self.template = "coloursView";
self.topColoursRed = ko.observable(false);
self.topColoursBlue = ko.observable(false);
self.topColoursGreen = ko.observable(false);
self.topColoursDescription = ko.observable("");
}
如何应在自定义绑定来实现这一目标? 我尝试类似的东西:
ko.bindingHandlers.topColoursLabel = {
update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
ko.utils.unwrapObservable(valueAccessor());
// ...
var checkText = '...';
viewModel.topColoursDescription(checkText);
}
};
我不能找出如何将数组传递给我的自定义绑定订阅的3个复选框的值,因为我小白到淘汰赛。
在我看来,一个像声明:
data-bind="topColoursLabel: { topColoursRed,topColoursBlue,topColoursGreen }"
将是巨大的,实现这一点,但我在寻找正确的方式来做到这一点。
注:我不能在这里使用计算的观察值,因为我需要从元素中获得一些其他属性 - 我的意思是标签 - 文本 - 所以需要自定义绑定。
有人可以帮忙吗?
修订的jsfiddle:http://jsfiddle.net/Sx87j/
谢谢你你的答案。自定义绑定的原因是,我会避免硬编码标签的文本。所以,在我看来,我需要自定义绑定参数元素来找出相关的label-for。 – user2308978 2013-04-27 07:36:56
由于您不希望标签标题硬编码,我假设您从外部数据获得这些标题?可能有一种感觉将所有颜色(带有标题)表示为JS数组并通过'foreach'绑定输出。 – 2013-04-27 07:49:05
嗨,我假设你对这个工作流感兴趣,但是这已经被修复了。 仅供参考:GUI是使用JQM创建的,使用许多不同的语言(ENU,FRA ...),所以我不会将标签的文本放在数据模型中。我的自定义绑定应该像GUI和数据/业务逻辑之间的一种“适配器”。这个工作流程还有其他一些优点。 更新的小提琴实际上按预期显示选定的标签,但仅对第一个复选框的更改作出反应。 我无法获得对所有3种可观察物质作出反应的功能,并且我认为它更具有敲除相关问题。 – user2308978 2013-04-27 11:29:24