我只是想知道如何从淘汰赛viewModel
中移除一个属性。具体来说,计算一个。我有一个简单的viewModel
function viewModel(){
var self = this;
self.name = ko.observable("John");
self.lastname = ko.observable("Doe");
self.age = ko.observable("22");
self.fullName = ko.computed(function(){
return self.name() + self.lastname();
});
self.fullNameAndAge = ko.computed(function(){
return self.name() + self.lastname() + ': ' + self.age();
});
};
数据将被发送到服务器,但我想从viewModel
中排除计算数据。
我认为这样的事情会得到所有的计算数据并删除它,但没有找到类似的东西。
for (observableKey in viewModel) {
if (ko.isComputed(viewModel[observableKey])
{
delete viewModel[observableKey];
}
}
答案 0 :(得分:3)
Knockout可以返回一个常规对象,然后您可以从中删除任何内容。
var plainJs = ko.toJS(viewModel);
delete plainJs.fullName;
记录here。
答案 1 :(得分:2)
你可以像这样循环键:
for (var key in obj) {
if(ko.isComputed(obj[key]))
{
delete obj[key];
}
}
修改强>
Here is a working fiddle。在小提琴中单击按钮并检查控制台,在那里你可以看到2个对象,第一个是在删除计算的obervables之前,第二个是在删除计算的observables之后。
答案 2 :(得分:0)
我遇到此类问题的首选方法是为JSON调用所需的任何内容创建特定的传输对象。
var userSaveRequest = function(data) {
var self = this;
self.name = data.name;
self.lastname = data.lastname;
// etc, etc
}
然后,从我的调用代码中获取JSON。
// inside viewModel
self.saveUser = function(){
var queryData = ko.mapping.toJSON(
new userSaveRequest(ko.mapping.toJS(self))
);
// use querydata in AJAX
}
此外,值得记住Javascript的灵活性。如果需要,您可以动态创建自己设计的对象。
var queryData = ko.mapping.toJSON(
{
name: self.name(),
lastname: self.lastname()
}
);