如何在Ember Data中为所有数据类型设置默认值?

时间:2015-02-06 23:27:59

标签: ember.js ember-data

我的模型没有为其任何属性提供默认值。我将这个模型绑定到模板上,我想将模型保存在转换上,只有它很脏。但是,只需输入文本字段然后离开文本字段将导致记录变脏,因为它以前是null / undefined,现在它是一个空字符串。我想知道是否有一个简单的解决办法吗?

型号:

App.MyModel = DS.Model.extend({
  myProperty: DS.attr('string')
});

路线:

App.MyModelRoute = Ember.Route.extend({
  actions: {
    willTransition: function(transition) {
      var modelIsDirty = this.get('currentModel.isDirty');

      if (modelIsDirty) {
        console.log('dirty model!');
      }
      else {
        console.log('not dirty');
      }
    }
  }
});

模板:

{{input type="text" value=model.myProperty}}

如果我只是对输入进行聚焦/模糊,这将导致记录变脏。有没有办法将任何字符串属性的默认值设置为''而不是nullundefined?我认为这可以解决问题。

我知道defaultValue属性,但我有15个模型,有些属性各有40多个属性。我想避免为每个字符串设置defaultValue

1 个答案:

答案 0 :(得分:1)

因此,如果我理解正确,您的服务器返回null或未定义模型中应该是字符串的某些属性?我有一些类似的问题,我有时希望该属性为null而不是空字符串。我没有修改模型类,而是通过向Ember文本字段类添加一个观察者来解决这个问题:

Ember.TextField.reopen({
    nullable: false,

    nullableObserver: function() {
        if (this.get('nullable') && this.get('value') === '') {
            this.set('value', null);
        }
    }.observes('value')
});

使用上面的代码,我可以通过将其nullable属性设置为true来使文本字段为空:

{{input type="text" value=someValue nullable=true}}

或者你可以在上面的代码中省略nullable属性,默认情况下为所有输入字段设置为null。