2016-05-15 50 views
0

听起来像一个足够简单的事情,现在正在导致我各种悲伤。Ember.js(2.5.0)如何设置嵌套的对象值

我有一个简单server模型,有几个嵌套的对象,

export default DS.Model.extend({ 
    type: DS.attr('string'), 
    attributes: DS.attr(), 
    tasks: DS.attr() 
}); 

我可以使用创建路由的新纪录

export default Ember.Route.extend({ 

    model() { 
     return this.store.createRecord('server'); 
    }, 

    actions: { 
     create(server) { 
      server.save().then(() => this.transitionTo('servers')); 
     } 
    } 
}); 

,并在相关.hbs我例如,使用value=model.attributes.name设置属性和任务的一些属性。

这一切工作正常。然而,我想在create期间从路线中添加更多属性,例如默认值。

使用server.set('attributes.size', 'large');不起作用,因为Ember不知道尺寸,因为它是一个新的记录。

我可以使用setProperties方法但这似乎消灭所有其他价值

server.setProperties({ 
    attributes: { 
     size: "large" 
    }, 
     tasks: { 
      create: true 
    } 
}); 

size现在的设置是否正确,但名称现在是零,因为我没有在setProperties方法指定它...

有关这方面的正确方法是什么?当然,我不需要绘制setProperties中的所有属性?这看起来很浪费,很容易出错。

我想过的东西应该属性只是它自己的模型,并与服务器有关系?尽管这通常是1对1和1对1的关系?

回答

0

我建议在这种情况下使用ember-data-model-fragments插件作为解决方案。

https://github.com/lytics/ember-data-model-fragments

使用用于属性的单独的模型和设置1对1的关系的其他选项。两者都是belongsTo,但它也取决于您的数据库和API,所以您必须调整后端系统以适应此新结构。