清除可观察物淘汰赛中的所有值

我使用淘汰赛模式上包含的表单上的数据绑定。 一旦用户提交表单,模式将在一个成功的帖子上结束。 我还想清除我的挖空视图模型中的所有可观察值,以便用户可以打开模式并从头开始提交新的表单。 我不想丢失已经在字段上设置的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