Knockout.js 使用knockout实现类似trello的任务板

Knockout.js 使用knockout实现类似trello的任务板,knockout.js,knockout-mapping-plugin,knockout-sortable,Knockout.js,Knockout Mapping Plugin,Knockout Sortable,我试图使用它来实现一个类似trello的任务板 我从一个json ajax调用中获取任务列表,每个任务元素都包含一个状态(“doing”、“done”…) 使用knockout映射插件从json创建一个模型非常容易,我甚至可以使用computed observer函数来过滤模型中的任务列表,并将适当的列表读取到每个单独的列表中。大概是这样的: $.getJSON( "/tasks/list/", function( data ) { viewModel = ko.mapping.from

我试图使用它来实现一个类似trello的任务板

我从一个json ajax调用中获取任务列表,每个任务元素都包含一个状态(“doing”、“done”…)

使用knockout映射插件从json创建一个模型非常容易,我甚至可以使用computed observer函数来过滤模型中的任务列表,并将适当的列表读取到每个单独的列表中。大概是这样的:

$.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);


我知道可以通过拆分任务列表来实现这一点,因此每个状态都有自己的可观察列表,然后在发送回服务器时将其合并回去,但我想知道是否有更干净的方法,而不必求助于此。

令人惊讶的是,人们总是忘记包括他们遇到的错误。除此之外,这个问题是完整的。。。也许如果您在JSFIDLE?中重新创建问题,为了使sortable正常工作,它需要处理实际的可观测数据。您可以将它们拆分为单独的observableArrays,并使用ko.computed表示可以始终发送回服务器的组合列表。
<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
    });