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

How do I set default values for all data types in 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}}

如果我简单地focus/blur输入,这会导致记录变脏。有没有办法将任何字符串 属性 的默认值设置为 '' 而不是 nullundefined?我认为这可能会解决问题。

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

所以如果我理解正确的话,你的服务器正在为你的模型中的某些属性返回 null 或 undefined ,这些属性应该是字符串?我有一些类似的问题,有时我希望 属性 为 null 而不是空字符串。我没有修改模型 class,而是通过向 Ember 文本字段 class:

添加一个观察者来解决这个问题
Ember.TextField.reopen({
    nullable: false,

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

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

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

或者您可以在上面的代码中省略可空的 属性,并将所有输入字段默认设置为空。