如何在Backbone Model initialize()中丢弃/拒绝额外的属性

时间:2014-03-12 09:15:55

标签: backbone.js backbone-model

我在使用来自Jackson的一些数据初始化Backbone模型时遇到了问题。

收到的数据碰巧有listPropertyValue,最初是对象的Java List。在执行initialize()方法时,我将其设为Backbone集合,没有太多问题。

但最终的SomeModel构造函数还添加了一个名为listPropertyValue的属性作为JavaScript数组,我不想这样做。

我如何丢弃或拒绝此阵列,哪种方法正确?

这是我的代码:

var SomeModel = Backbone.Model.extend({

   defaults : {
     id:null,
     name:'',
     order:null,
     isRequired:null,
}

initialize : function(options) {
    if(options.listPropertyValue !== undefined) {
        this.set('collectionPropertyValue', new PropertyValueCollection(options.listPropertyValue))
    }

    // I thought of doing this. Don't know if it's the right thing to do

    // this.unset('listPropertyValue', { silent: true });

}

我关心的不仅仅是如何做到这一点,而是如何以适当的Backbone方式做到这一点。

2 个答案:

答案 0 :(得分:1)

(我假设你从某个地方的API获取这些数据。)

您应该在模型中定义parse方法,仅返回您感兴趣的数据:

parse: function(response){
  return _.omit(response, "listPropertyValue");
}

Backbone将为您完成剩下的工作:每次从数据接收API时,它都会自动调用parse

了解更多信息:http://backbonejs.org/#Model-parse

答案 1 :(得分:0)

我终于做到了。我使用了我发布的相同代码,但是直到我使用1.1.2版本的骨干(我使用的是1.0.0或类似版本)时它才起作用。

var SomeModel = Backbone.Model.extend({

   defaults : {
        id:null,
        name:'',
        order:null,
        isRequired:null,
    }

    initialize : function(options) {
        if(options.listPropertyValue !== undefined) {
            this.set('collectionPropertyValue', new PropertyValueCollection(options.listPropertyValue));
        }

        this.unset('listPropertyValue', {
            silent : true
        });
    }
}