清除可观察物淘汰赛中的所有值
我使用淘汰赛模式上包含的表单上的数据绑定。 一旦用户提交表单,模式将在一个成功的帖子上结束。 我还想清除我的挖空视图模型中的所有可观察值,以便用户可以打开模式并从头开始提交新的表单。 我不想丢失已经在字段上设置的ko.observable绑定。
对于上下文来说,我的viewmodel是另一个视图模型的孩子。
在我的父视图模型中
self.childElement = ko.observable(new childElementVm());
我的孩子观点模型
var childElementVm = function (){
var self= this;
self.property1 = ko.observable()
self.property2 = ko.observable()
self.property3 = ko.observable()
self.property4 = ko.observable()
self.property5 = ko.observable()
self.property6 = ko.observable()
self.array1 = ko.observableArray()
self.array2 = ko.observableArray()
self.array3 = ko.observableArray()
self.array4 = ko.observableArray()
//several more observables
//a smattering of functions including some self.property.subscribe functions
$.ajax({
//post
}).done(function(){
$('#myModal').modal('hide');
//reset all values in childElementVm
});
}
每次创建一个新的视图模型可能会更好。 你使用Knockout来销毁和重制你的视图模型。 if绑定将添加和删除dom中的元素。 如果添加的元素是Knockout组件,则将自动创建视图模型。
<div class="myModal">
<-- ko if: isModalPresented -->
<my-child-component params="myChildElementParams"></my-child-component>
<-- /ko -->
</div>
每次打开模态时,都可以放入一个新的视图模型,因此在打开模态时可以这样做:
parentVM().childElementVm(new childElementVm());
我在评论中看到您的childElementVm中有一些订阅,因此如果您执行以下操作,则必须将订阅存储在childElementVm中,并在关闭模式时处理它们。 这看起来有点像这样:
//Store subscriptions
var subscriptions = [];
subscriptions.push(myViewModel.personName.subscribe(function(newValue) {
alert("The person's new name is " + newValue);
}));
//Dispose
for(var i = 0; i < subscriptions.length; i++){
subscriptions[i].dispose()
}
这会重置您的数据,因为每次打开模式时都会有一个全新的childElementVm。
你可以使用这个功能:
function resetObservables(object, defaultValue) {
for (var key in object) {
if (object.hasOwnProperty(key)) {
var property = object[key];
if(ko.isObservable(property)){
property(defaultValue);
}
}
}
}
通过这种方式 :
$.ajax({
//post
}).done(function(){
$('#myModal').modal('hide');
//reset all values in childElementVm
resetObservables(self,"");
});
链接地址: http://www.djcxy.com/p/50145.html
上一篇: clear all the values from observables knockout
下一篇: Accessing a parent viewmodel from a checkbox change within a child view