使用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"] });
    }
};

07-24 09:47
查看更多