击倒映射选项;将一个JSON属性映射到两个视图模型属性
Knockout mapping options; map a JSON property to two view model properties
为了在发布/保存(可能)修改的视图模型到服务器时进行乐观的并发检查,我想在一个单独的变量中获取原始值的副本,而不是我用knockout绑定绑定到的可观察对象。
这是可能做与knockout映射插件,或者我必须迭代映射的可观察对象采取复制后,我已经填充视图模型?
这个怎么样?
function Task(data) {
var self = this;
self.title = ko.observable(data.title);
self.origTitle = data.title;
self.isDone = ko.observable(data.isDone);
self.origIsDone = data.isDone;
self.changes = ko.computed(function() {
var changed = [];
if (self.title() != self.origTitle) changed.push({ self.title(), self.origTitle });
if (self.isDone() != self.origIsDone) changed.push({ self.isDone(), self.origIsDone });
return changed;
});
}
function TaskListViewModel() {
// Data
var self = this;
self.tasks = ko.observableArray([]);
self.newTaskText = ko.observable();
self.changes = ko.computed(function() {
var tasksToPost = ko.utils.arrayFilter(self.tasks(), function(task) { return task.changed().length > 0 });
$.ajax({
type: 'POST',
url: '/SomeUrl',
data: tasksToPost
});
});
// Operations
self.addTask = function() {
self.tasks.push(new Task({ title: this.newTaskText() }));
self.newTaskText("");
};
self.removeTask = function(task) { self.tasks.remove(task) };
// Load initial state from server, convert it to Task instances, then populate self.tasks
$.getJSON("/tasks", function(allData) {
var mappedTasks = $.map(allData, function(item) { return new Task(item) });
self.tasks(mappedTasks);
});
}
ko.applyBindings(new TaskListViewModel());
相关文章:
- 使用Google'设置ID属性;s映射API
- GWT:setInnerHTML取消映射属性值
- 使用挖空 JS 映射选项将可观察属性添加到映射的可观察数组
- 将 Json 对象映射到每个属性类和数据
- 映射 Json 数据并添加数据属性
- JavaScript 将数组映射到对象属性
- 有没有一种简单/快速的方法将“data-”属性映射到大小写混合的属性名称
- JSON 对象属性在映射事件处理程序中未定义
- 如何在对象属性上映射字符串序列
- 尝试在不可扩展对象上定义属性时,弱映射填充项引发错误
- 未捕获的类型错误: 无法读取未定义的属性“映射”
- D3 数据映射:传入气泡属性的气泡上的 OnClick 事件
- 避免'无法读取未定义'的属性;映射数据时出错
- 必应映射实体集合DOM属性
- 从函数返回属性映射
- 热门的是用jQuery将html输入属性映射到对象
- 将元素属性映射到元素文本
- jQuery.返回对象属性映射时出现映射错误
- JSON Javascript - 属性映射 - 函数引用
- 击倒映射选项;将一个JSON属性映射到两个视图模型属性