我正在使用knockoutjs映射插件。 我使用插件将数据绑定到viewmodel。 然后我修改数据并提交回来。 提交时,我获取了视图模型的初始值和更改的值。
小提琴在这里:http://jsfiddle.net/jarajesh/HV7g4/3/
// Here's my data model
var ViewModel = function (data) {
var self = this;
ko.mapping.fromJS(data, {}, self);
self.nameLength = ko.computed(function() {
return self.firstName().length;
}, self);
self.finalstring = ko.observable('');
self.numberOfClicks = ko.observable(0);
self.incrementClickCounter = function() {
var previousCount = self.numberOfClicks();
self.numberOfClicks(previousCount + 1);
};
self.refresh = function() {
var newData = {'firstName': 'refreshed', 'lastName': 'person'};
ko.applyBindings(new ViewModel(newData));
};
self.save = function () {
alert(ko.mapping.toJSON(self));
//$.ajax({
// url: "Knockout2/Save",
//type: "post",
//contentType: "application/json",
//data: ko.mapping.toJSON(self),
//success: function (response) {
// alert(response.Status);
//}
//});
//self.finalstring=ko.mapping.toJSON(self);
};
};
var newData = {'firstName': 'first', 'lastName': 'person'};
ko.applyBindings(new ViewModel(newData));
重现的步骤:
我认为这与文档中提供的_destroy有关。
必需的解决方案:
答案 0 :(得分:1)
在不到5分钟的时间内发布问题我自己得到了答案
必需的解决方案:
如何阻止提交初始值? 我再次应用数据,这使得这种情况发生了。将代码修改为
ko.mapping.fromJS(newData, {}, self);
警报中抛出的对象是什么?
在代码中包含未定义的对象数据。将代码修改为
alert(ko.mapping.toJSON(self, mapping));
如何将计算属性nameLength包含在提交中?
var mapping = { 'include': ["nameLength"]};
可以找到更新的小提琴here