我有相同的複選框和單選按鈕的數據結構。當檢查複選框時,它們會返回正確的布爾值('selected'變量)。KnockoutJS單選按鈕不會像複選框一樣變化
但是,當我檢查單選按鈕時,'選擇'總是更改爲'值'(整數)。
而且單選按鈕沒有得到 「選中」 在開始的時候,即使 '選擇' ==真
的Javascript:
function attributeValueViewModel(data) {
var self = this;
self.id = ko.observable(data.id);
self.attributeID = ko.observable(data.attributeID);
self.value = ko.observable(data.value);
self.chosen = ko.observable(data.chosen);
}
function viewModel() {
var self = this;
self.attributeValues1 = ko.observableArray([]);
self.attributeValues2 = ko.observableArray([]);
self.addToList = function(data) {
ko.utils.arrayForEach(data, function(item) {
self.attributeValues1.push(new attributeValueViewModel(item));
self.attributeValues2.push(new attributeValueViewModel(item));
});
};
}
var arr = [
{
"id": 55,
"attributeID": 28,
"value": "Yes",
"chosen": false,
},
{
"id": 56,
"attributeID": 28,
"value": "No",
"chosen": true,
},
{
"id": 62,
"attributeID": 28,
"value": "Maybe",
"chosen": false,
}
];
var vm = new viewModel();
ko.applyBindings(vm);
vm.addToList(arr);
HTML
<b>Checkbox:</b>
<div id="test1">
<span data-bind="foreach: attributeValues1()">
<input type="checkbox" data-bind="value: id(), checked: chosen, attr: { name: 'test1' }" />
<span data-bind="text: value()"></span>
<span data-bind="text: chosen()"></span>
</span>
</div>
<br />
<b>Radio:</b>
<div id="test2">
<span data-bind="foreach: attributeValues2()">
<input type="radio" data-bind="value: id(), checked: chosen, attr: { name: 'test2' }" />
<span data-bind="text: value()"></span>
<span data-bind="text: chosen()"></span>
</span>
</div>
這是我的小提琴:http://jsfiddle.net/SN7Vn/1/
你能解釋這種行爲,爲什麼單選按鈕不更新布爾(就像複選框一樣)?
謝謝您的回答。我想要的就是「選擇」是否爲「複選框」,是正確/錯誤 - 就像複選框一樣。另外,如果我添加了一個下拉列表,我希望該值是true/false,無論該值是否在列表中被選中。這可能嗎? – Gaui
有可能獲得該行爲,但需要一些工作。 –
我有一個可能的解決方案來做你想做的事情,但由於應用綁定的未知順序以及'checked'綁定的工作方式,它似乎非常脆弱。因爲這個,我有點猶豫分享這個。 –