0

使用 asp.net mvc,我将一个视图模型向下传递并敲除以映射一个视图模型并绑定到它。

这对我来说一切正常,我想做的是跟踪删除。

我想我可以通过添加 _destroy 属性但将其设置为 false 来做到这一点。

我希望用户界面会忽略这一点,直到将其设置为真。

但情况似乎并非如此,仅此属性的存在就导致被视为已损坏。

这是一个错误还是我处理错了?

非常感谢,科汉

  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/

更新:似乎是映射扩展的问题。

4

1 回答 1

5

正在发生的事情是您正在_destroy通过映射插件发送,并且它作为一个 observable 出来。Knockout 并不期望它是一个可观察的(一个函数),所以当它进行检查时if (_destroy),结果将是真的,因为_destroy它是一个函数并且它没有被打开来查看它的值。

您可以执行以下操作:http: //jsfiddle.net/rniemeyer/jy53e/7/以防止_destroy成为可观察对象。

因此,使用映射选项:

var mappingOptions = {
    create: function(options) {
        return ko.mapping.fromJS(options.data, { copy: ["_destroy"] }); 
    }
};
于 2011-10-06T22:49:25.170 回答