我不确定这样做的最佳方法是什么。但是在http://knockoutjs.com/documentation/computedObservables.html中有一个部分说“确定属性是否是计算的可观察对象”。我曾经isComputed
检查过该属性是否是计算出的 observable。
我想self.formItems()
在将值传递给我的服务器之前排除/删除计算出的 observables。
这是我的代码的一部分,其中包含将数据发送回服务器的 AJAX 请求。
for (var prop in self.formItems()) {
// console.log(ko.isComputed(self.formItems()[prop].isRadio)); //true (because this is computed)
// console.log(ko.isComputed(self.formItems()[prop].field_label)); //false (because this is not a computed element)
for(var form_prop in self.formItems()[prop]) {
// console.log(form_prop+': '+ko.isComputed(self.formItems()[prop][form_prop]));
if(self.formItems()[prop].hasOwnProperty(form_prop) && !ko.isComputed(self.formItems()[prop][form_prop])) {
// result_no_computed_observables[prop][form_prop] = ko.toJS(self.formItems()[prop][form_prop]);
console.log(self.formItems()[prop][form_prop]);
}
// ko.cleanNode(self.formItems()[prop][form_prop])
}
}
$.ajax({
'type': 'POST',
'url': appUrl+'/editors/saveform/'+memberListId+'.json',
'cache': false,
'dataType': 'json',
'contentType': 'application/json',
'data': ko.toJSON({
'id': theFormDetails.id(),
'name': theFormDetails.name(),
'description': theFormDetails.description(),
'success_text': theFormDetails.success_text(),
'success_redirect': theFormDetails.success_redirect(),
'form_elements': self.formItems() /* <--- I would like to remove computed observables from this*/
}),
'success': function(result) {
alert('success!!!');
},
'statusCode': {
403: function() {
alert("Your session has probably expired. Please login again.");
window.location = appUrl+"/users/login";
}
}
});
有任何想法吗?
谢谢!