Реализация трелло-подобной доски задач с использованием нокаута

Я пытаюсь использовать сортировку по выбору, чтобы реализовать доску задач, которая напоминает Трелло.

Я получаю список задач из вызова 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
    });

Я знаю, что этого можно добиться, разделив список задач, чтобы у каждого статуса был свой наблюдаемый список, а затем объединить его при отправке обратно на сервер, но мне интересно, есть ли более чистый способ, без необходимости прибегать к этому,

0 ответов

Другие вопросы по тегам