以下是我正在使用的标记的子集:
<div id="item_one"></div>
<div id="item_two"></div>
<div id="item_three"></div>
<p id="result_one">0</p>
<p id="result_two">0</p>
<p id="result_three">0</p>
期望的行为是:
这似乎是淘汰赛的好用,但我是一个完整的菜鸟。如何设置正确的依赖项?
答案 0 :(得分:5)
以下是一种方法示例:http://jsfiddle.net/rniemeyer/XqDsy/
为方便起见,我创建了一个暴露切换功能的“binaryObservable”。
function binaryObservable(initialValue) {
var result = ko.observable(initialValue);
result.toggle = function() {
result(result() === "1" ? "0" : "1");
};
return result;
}
function ViewModel() {
this.one = binaryObservable("0");
this.two = binaryObservable("0");
this.three = binaryObservable("0");
this.combined = ko.dependentObservable(function() {
return this.one() + this.two() + this.three();
}, this);
this.choices = {
"000": { id: 0, value: "000" },
"001": { id: 1, value: "001" },
"010": { id: 2, value: "010" },
"011": { id: 3, value: "011" },
"100": { id: 4, value: "100" },
"101": { id: 5, value: "101" },
"110": { id: 6, value: "110" },
"111": { id: 7, value: "111" }
};
this.selectedChoice = ko.dependentObservable(function() {
var combined = this.combined();
return combined ? this.choices[combined] : {};
}, this);
}
ko.applyBindings(new ViewModel());
然后HTML可能如下所示:
<div id="item_one" data-bind="click: one.toggle">option one</div>
<div id="item_two" data-bind="click: two.toggle">option two</div>
<div id="item_three" data-bind="click: three.toggle">option three</div>
<hr/>
<p id="result_one" data-bind="text: one">0</p>
<p id="result_two" data-bind="text: two">0</p>
<p id="result_three" data-bind="text: three">0</p>
<hr/>
<p data-bind="text: combined"></p>
<hr/>
Selected choice: <span data-bind="text: selectedChoice().id"></span>
答案 1 :(得分:1)
我远非专家,但这样的事情? jsFiddle