使用asp.net mvc,我向下传递了一个视图模型,并获得了敲除作用以映射一个视图模型并将其绑定到此模型。
这对我来说一切正常,我想做的是删除曲目。
我以为我可以通过添加_destroy属性但将其设置为false来做到这一点。
我希望ui可以忽略它,直到destroy将其设置为true为止。
但这似乎并非如此,仅此属性的存在就被视为被破坏。
这是错误还是我处理错误?
非常感谢,
高汉
var model = [{"Id":1,"Name":"Bikes","Parent":null,"_destroy":false},
{"Id":2,"Name":"Components","Parent":null,"_destroy":false},
{"Id":3,"Name":"Clothing","Parent":null,"_destroy":false},
{"Id":4,"Name":"Accessories","Parent":null,"_destroy":false},
{"Id":5,"Name":"Mountain Bikes","Parent":1,"_destroy":false},
{"Id":6,"Name":"Road Bikes","Parent":1,"_destroy":false},
{"Id":7,"Name":"Touring Bikes","Parent":1,"_destroy":false},
{"Id":8,"Name":"Handlebars","Parent":2,"_destroy":false}] ;
以上元素均不会显示。甚至“ _destroy”:null也具有相同的效果。
问题的工作示例...
http://jsfiddle.net/jy53e/6/
更新:似乎是映射扩展的问题。
最佳答案
发生的情况是您正在通过映射插件发送_destroy
,并且它以可观察的形式出现。敲除并不期望它是可观察的(函数),因此当它执行if (_destroy)
之类的检查时,结果将为true,因为_destroy
是函数并且不会展开以查看其值。
您可以执行以下操作:http://jsfiddle.net/rniemeyer/jy53e/7/防止_destroy
成为可观察对象。
因此,使用映射选项:
var mappingOptions = {
create: function(options) {
return ko.mapping.fromJS(options.data, { copy: ["_destroy"] });
}
};