如何清除击倒中的可观察属性?

sin*_*ici 2 knockout-mapping-plugin knockout.js

我有javascript代码块和html如下.模型对象是通用的.它在运行时定义.

它可以是这样的.

var model = { "xId": ko.observable(0), "xName": ko.observable(null), "Type": ko.observable("x") };
   /* var model = { "yId": ko.observable(0), "yName": ko.observable(null), "Type": ko.observable("y") };
    var model = { "zId": ko.observable(0), "zName": ko.observable(null), "Type": ko.observable("z") };  */

    var vm = function (data) {
        ko.mapping.fromJS(data, {}, this);
    };

    var vm2 = function () {
        var self = this;
        self.New = ko.observable(null);
        self.NewItem = function () {
            console.log(model);
            self.New(new vm(model));
        };
    };

    var viewModel = new vm2();
    ko.applyBindings(viewModel);

    vm.prototype.Save = function () {
        viewModel.New(null);
        /*In here all of inputs must be cleared but How to :)*/
    };
Run Code Online (Sandbox Code Playgroud)

第一个模型的newForm.

<input type="button" data-bind="click: NewItem" value="Add" />
<div data-bind="with:New" id="newForm">
    <input type="text" data-bind="value:xId" />
    <input type="text" data-bind="value:xName" />
    <input type="text" data-bind="value:Type" />
    <input type="button" data-bind="click: Save" value="Save" />
</div>
Run Code Online (Sandbox Code Playgroud)

我单击添加按钮,然后我将某些内容输入到输入,然后单击保存按钮.newForm是隐形的.到目前为止一切都很好.但我再次点击添加按钮,我写的值仍在输入中.保存后我无法清除newForm.

编辑:

public class Test{
    public int TestId {get; set;}
    public int TestName {get; set;}
}

public class Test2{
    public int Test2Id {get; set;}
    public int Test2Name {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

实体类的coutn不清楚.

我的实体类转换为json.这个模型是由.net创建的.我的项目有一个母版页和子页面.测试页面:

var model = <%=ViewModelCreator.Create<Test>() %>;
Run Code Online (Sandbox Code Playgroud)

for test2页面:

var model = <%=ViewModelCreator.Create<Test2>() %>;
Run Code Online (Sandbox Code Playgroud)

And*_*ers 8

编辑:你的viewmodel有点奇怪,有了内部模型,它是对同一个observable的静态引用,映射插件会在找到它们时重用旧的observable.为什么你甚至将这样的映射映射到静态定义的可观察集合,为什么不直接声明你的viewmodel?

老答案 能做到吗?

for(var index in vm) {
   if(ko.isObservable(vm[index])) {
      vm[index](null);
   }
}
Run Code Online (Sandbox Code Playgroud)

编辑:您还可以创建一个可清除的特殊可观察对象


小智 5

你必须清除观察的价值,如:

self.propertyName('');
Run Code Online (Sandbox Code Playgroud)

例:

self.XID('');
Run Code Online (Sandbox Code Playgroud)