Реализация трелло-подобной доски задач с использованием нокаута
Я пытаюсь использовать сортировку по выбору, чтобы реализовать доску задач, которая напоминает Трелло.
Я получаю список задач из вызова json ajax, и каждый элемент задачи содержит статус ("выполняется", "выполнено"...).
Действительно легко создать модель прямо из json, используя плагин отображения выбивки, и я даже могу использовать вычисленные функции наблюдателя, чтобы отфильтровать список задач в модели и прочитать соответствующий список в каждом отдельном списке. Что-то вроде этого:
$.getJSON( "/tasks/list/", function( data ) {
viewModel = ko.mapping.fromJS(data);
viewModel.ToDoTasks = ko.computed(function() {
var status = "To Do";
return ko.utils.arrayFilter(this.tasks(), function(item) {
return (item.status() === status);
});
}, viewModel);
...
<div class="widget_contents noPadding"
data-bind="sortable: { template: 'taskTmpl', data: ToDoTasks }">
</div>
Дело в том, что при переходе из одного списка в другой я получаю сообщение об ошибке, поскольку нокаут не знает, как обновить список, предоставленный с помощью наблюдаемой.
Я попытался реализовать вычисляемую наблюдаемую как чтение-запись, но я получаю ту же ошибку:
viewModel.ToDoTasks = ko.computed({
read: function() {
var status = "To Do";
return ko.utils.arrayFilter(this.tasks(), function(item) {
return (item.status() === status);
});
},
write: function (value) {
console.log(value);
// Will update the status field for the task in the array...
},
owner: viewModel
});
Я знаю, что этого можно добиться, разделив список задач, чтобы у каждого статуса был свой наблюдаемый список, а затем объединить его при отправке обратно на сервер, но мне интересно, есть ли более чистый способ, без необходимости прибегать к этому,