Ember.js绑定和保存属于财产



我有两个模型通过利用async属性通过belongsTo(互惠关系,即 1:1)相互关联。检索一条记录并将其设置为路由器上的模型后,我可以访问主记录及其关联的属性 - 那里一切正常。我使用输入帮助程序将属性绑定到inputtextarea元素,以便用户可以对模型进行更改,包括关联记录上的属性。但是,当我运行save()函数时,Ember 只对主记录发出PUT请求,而不是对关联的记录发出请求,即使它是更改的记录。

入门.js(型号)

export default DS.Model.extend({
  // Properties
  entry: DS.attr('Number'),
  ...
  // Relational properties
  definition: DS.belongsTo('definition', {async: true}),
 ...
});

定义.js(型号)

export default DS.Model.extend({
  // Properties
  blocks: DS.attr(),
  ...
  // Relational properties
  entry: DS.belongsTo('entry', {async: true}),
  ...
});

路线.js

export default Ember.Route.extend({
  model: function(params){
    return this.store.find('Entry', params.entry_id);
  },
  actions: {
    saveDef: function(){
      // console.log('Saving . . .');
      var entry = this.controller.get('content');
      entry.save().then(function(){
        // console.log('Saved Success');
      }, function(err){
        // console.log(err);
      });
    }
  }
});

提前谢谢。

在 Ember 中保存模型时,不会保存其他模型。您需要单独保存每个模型。我建议您为每个模型创建一个单独的视图并单独保存,因为您可能会遇到一致性问题。

无论如何,这是保存这两个模型的方法。

var model = this.controller.get('content');
model.save();
var definition = model.get('definition');
if( definition && definition.then ) {
  definition.then(function(definition) { definition.save(); });
} else if( definition ) {
  definition.save();
}

更新:

这里的问题是定义未加载。因此,当您调用model.get('definition') Ember时,需要从服务器获取模型。这就是它返回承诺的原因。

在我看来,您正在尝试保存定义模型只是为了更新关系。你不需要这样做。第一次保存就足够了。更新其他模型应在服务器上完成。

首先你必须保存第一个模型,将返回的数据设置为第二个模型保存第二个模型

路线.js

export default Ember.Route.extend({
  model: function(params){
    return this.store.find('Entry', params.entry_id);
  },
  actions: {
    saveDef: function(){
      // console.log('Saving . . .');
      var def=this.controllerFor("deffinition").get("content"); // cotroller of defeinition route
      var entry = this.controller.get('content'); // controller of entry route
      def.save().then(function(res){
        // console.log('Saved Success');
        let def = _this.store.peekRecord('Definition', res.get('id'));
        entry.set('deffinition', def);
        entry.save().then(function (res) {
         // Success callback
            
        });
      }, function(err){
        // console.log(err);
      });
    }
  }
});

处理关系

Ember 不会对你的模型进行级联保存,你需要自己保存另一个模型。

最新更新