我有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 :)*/
};
第一个模型的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>
我单击添加按钮,然后我将某些内容输入到输入,然后单击保存按钮。 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;}
}
实体类的coutn不清楚。
我的实体类转换为json。这个模型是由.net创建的。 我的项目有一个母版页和子页面。 对于测试页面:
var model = <%=ViewModelCreator.Create<Test>() %>;
for test2 page:
var model = <%=ViewModelCreator.Create<Test2>() %>;
答案 0 :(得分:8)
编辑:你的viewmodel有点奇怪,有了内部模型,它是对同一个observable的静态引用,映射插件会在找到它们时重用旧的observable。为什么你甚至将这样的映射映射到静态定义的observable集合,为什么不直接声明你的viewmodel?
旧答案 能做到吗?
for(var index in vm) {
if(ko.isObservable(vm[index])) {
vm[index](null);
}
}
编辑:您还可以创建一个可清除的特殊observable
答案 1 :(得分:5)
您必须清除观察点的值,如:
self.propertyName('');
示例:
self.XID('');
答案 2 :(得分:0)
您的代码存在一些设计问题。 model
对象已包含observable,因此您无需使用映射插件来转换它们。我建议您更新代码如下:
function vm(){
var self = this;
self.xId = ko.observable(0);
self.xName = ko.observable(null);
self.Type = ko.observable("x");
}
var vm2 = function() {
var self = this;
self.New = ko.observable(null);
self.NewItem = function() {
self.New(new vm());
};
};
var viewModel = new vm2();
ko.applyBindings(viewModel);
vm.prototype.Save = function() {
viewModel.New(null);
};
这是工作小提琴:http://jsfiddle.net/3uhN7/