4im*_*ble 0 javascript destroy asp.net-mvc-3 knockout-mapping-plugin knockout.js
使用asp.net mvc,我传递一个viewmodel并获取knockout来映射一个viewmodel并绑定到它.
这对我来说都很好,我想做的是跟踪删除.
我想我可以通过添加_destroy属性但将其设置为false来完成此操作.
我希望ui会忽略这个,直到destroy将其设置为true.
但事实似乎并非如此,仅仅存在这种财产就会被视为被破坏.
这是一个错误还是我处理这个错误?
非常感谢,Kohan
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}] ;
Run Code Online (Sandbox Code Playgroud)
上述元素均不会显示.甚至"_destroy":null也有同样的效果.
更新:似乎是映射扩展的问题.
发生的事情是你_destroy通过映射插件发送它,它作为一个可观察的出现.Knockout并不期望它是一个可观察的(一个函数),所以当它进行检查时if (_destroy),结果将是真的,因为它_destroy是一个函数,并且它没有被打开以查看它的值.
您可以执行以下操作:http://jsfiddle.net/rniemeyer/jy53e/7/,以防止_destroy被制作成可观察的内容.
因此,使用映射选项:
var mappingOptions = {
create: function(options) {
return ko.mapping.fromJS(options.data, { copy: ["_destroy"] });
}
};
Run Code Online (Sandbox Code Playgroud)