Knockout.js 使用knockout实现类似trello的任务板
我试图使用它来实现一个类似trello的任务板 我从一个json ajax调用中获取任务列表,每个任务元素都包含一个状态(“doing”、“done”…) 使用knockout映射插件从json创建一个模型非常容易,我甚至可以使用computed observer函数来过滤模型中的任务列表,并将适当的列表读取到每个单独的列表中。大概是这样的: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
$.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
});