KnockoutJs 1.3测试版._destroy:false在UI上的结果与_destroy:true相同

KnockoutJs 1.3 beta. _destroy:false has same result on ui as _destroy:true

本文关键字:destroy 结果 相同 true false 测试版 KnockoutJs UI      更新时间:2023-09-26

使用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,它作为一个可观察对象出来。Knockout不期望它是一个可观察对象(一个函数),所以当它执行像if (_destroy)这样的检查时,结果将为真,因为_destroy是一个函数,并且它没有打开来查看它的值。

你可以这样做:http://jsfiddle.net/rniemeyer/jy53e/7/来防止_destroy被做成一个可观察对象

所以,使用映射选项:

var mappingOptions = {
    create: function(options) {
        return ko.mapping.fromJS(options.data, { copy: ["_destroy"] }); 
    }
};