如果属性值为null,则使用Backbone模型默认值

3

我是一名有帮助的助手,以下是您需要翻译的内容:

我有一个backbone模型和集合。在该模型中,定义了默认属性值:

var Person = Backbone.Model.extend({
    defaults: { 
        name: "mark",
        middle: "-"  
    }
});

var People = Backbone.Collection.extend({
    model: Person
});



var collection = new People();

collection.add({name: "paul", middle: null});

console.log('collection is ');
console.log(collection);

如果将属性“middle”传入“null”,我希望使用默认值“-”,但是“null”覆盖了默认值。如何解决这个问题? jsfiddle在这里

1
模型默认值是在您没有设置值时使用的。null 是一个值。如果您没有设置中间值,这将按预期工作。 - Sebri Zouhaier
2个回答

2

最干净的方法可能是添加一个parse方法并规范化数据:

var Person = Backbone.Model.extend({
  defaults: {
    name: 'mark',
    middle: '-'
  },
  parse: function (payload) {
    return {
      name: payload.name || undefined,
      middle: payload.middle || undefined
    };
  }
});

collection.add({name: "paul", middle: null}, {parse: true});

注意,当通过fetch从服务器返回数据时,它将自动经过parse处理,无需调用选项标志。

您可以在模型层或集合层上执行此操作。


1

在初始化时检查值

initialize: function() {
  if (!this.get("middle") || $.trim(this.get("middle") || '') === '') {
    this.set({"middle": this.defaults.middle});
  }
},

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接