У меня возникли проблемы с тем, чтобы проверенная привязка knockoutjs работала правильно. Не уверен, что я просто делаю что-то неправильно или что. У меня есть эта часть html
<ul data-bind="foreach: ListItems" >
<li style="padding-left: 0px; margin-left: 0px; color: white; font-size: 12px;">
<div class="title" style="margin-right: 3em; line-height: 20px;">
<input type="checkbox" data-bind="checked: IsActive" />
<label data-bind="text: Quantity, disable: IsActive"</label>
<label data-bind="text: Description, disable: IsActive" ></label>
</div>
</li>
</ul>
Где я хочу установить флажок, который позволяет пользователям отмечать элементы из этого списка, нажав на флажок, который должен либо вычеркнуть текст, либо его серый или что-то еще.
Моя модель просмотра создается путем получения следующего формата данных json.
{"$id":"1","Description":"New List","Categories":
[{"$id":"2","Description":"Bread/Bakery","ListItems":
[{"$id":"3","IsActive":1,"Description":"Bread","Quantity":"1 Loaf"}]},
{"$id":"4","Description":"Beverages","ListItems":
[{"$id":"5","IsActive":1,"Description":"Coke","Quantity":"1 Case"},
Поэтому проблема в том, что проверка флажка здесь фактически не делает. Это должно быть отключением других меток, но это не так. Все мои другие значения отображаются правильно, и если я делаю data-bind = text: IsActive, я могу видеть значение, которое должно меняться с помощью флажка, но оно никогда не изменяется.
Изменение: следующее предложение ниже:
var mydata = ko.observableArray([
{
Categories: ko.observableArray([
{
Description: "Dairy", ListItems: ko.observableArray([
{ Description: "Eggs", Quantity: "1 Dz.", IsActive: ko.observable(false) },
{ Description: "Milk", Quantity: "1 Gallon", IsActive: ko.observable(false) }
])
},
{
Description: "Produce", ListItems: ko.observableArray([
{ Description: "Lettuce", Quantity: "1 Head", IsActive: ko.observable(false) },
{ Description: "Oranges", Quantity: "5 ea.", IsActive: ko.observable(false) },
{ Description: "Greenbeans", Quantity: "1 Thingy", IsActive: ko.observable(false) },
])
},
])
}
]);
Проблема, с которой вы сталкиваетесь, заключается в том, что ваши данные являются простым JSON-объектом и будут связаны только один раз.
Чтобы получить двунаправленное поведение привязки, которое вы ищете, ваши объекты должны быть "наблюдаемыми", например, например:
var mydata = ko.observable({
Categories: ko.observableArray([
{ IsActive: ko.observable(true) }
])
});
Обратите внимание, что вам решать, какие элементы в вашей структуре должны быть наблюдаемыми; это будет зависеть от того, как вы хотите, чтобы привязки велись.