Ember Rails模特关系

时间:2014-10-27 10:52:26

标签: ruby-on-rails ember.js ember-data

我继承了一个基于Rails API构建的Ember.js应用程序。这最初运行如下:

Ember.VERSION : 1.0.0 ember.js
DEBUG: Handlebars.VERSION : 1.0.0 ember.js
DEBUG: jQuery.VERSION : 1.10.2   

但这些已更新为以下内容:

Ember      : 1.7.1+pre.f095a455 ember.js
DEBUG: Ember Data : 1.0.0-beta.10+canary.30d6bf849b ember.js
DEBUG: Handlebars : 1.3.0 ember.js

使用ember-rails gem。

在尝试保存剖面模型时,我遇到了一个很大的阻碍问题。每个部分都与行模型有关系:

row: DS.belongsTo('row', { async: true })

和行模型作为回报:

sections: DS.hasMany('section', { async: true })

保存新部分在控制器中运行以下功能。在将该对象发送到createRecord方法之前,正在发送行类并将其应用于对象。

_createSection: function(row, new_section_data){
  var store = this.get('store');
  new_section_data.width    = this.getNewSectionWidth(row);
  new_section_data.position = this.getNewSectionPosition(row);
  new_section_data.row      = row;

  var new_section = store.createRecord('section', new_section_data);

  console.log(' returned new_section ');
  console.log(new_section);
  new_section.save().then(function () {
    console.log('saved');
    new_section.set('set_as_selected', true);

    console.log(' new_section post save ');
    console.log(new_section);

  }, function () {
    console.log('new section save failure');
  });

  return new_section;
},

创建模型后问题就存在。该行实际上并未正确应用于模型,因此Rails API请求不起作用且该节未被保存。

createRecord请求之前new_section对象中保存的数据如下:

html: "<p>New section</p>"
position: 3
row: Class
section_type_type: "TextSection"
width: 6

这是上面代码中附加的行类(扩展的_data节点):

__ember1414408746094: "ember791"
__ember_meta__: Object
__nextSuper: undefined
_attributes: Object
_changesToSync: Object
_data: Object
  id: 1
  page: Class
  page_id: 1
  position: 1
  sections: Array[2]
  style: null
  __proto__: Object
_deferredTriggers: Array[0]
_hasHadSections: true
_inFlightAttributes: Object
_relationships: Object
_updatingRecordArraysLater: false
container: Container
currentState: Object
defaultStyleObject: Object
id: "1"
store: Class
updateTimeout: 7
__proto__: Class
section_type_type: "TextSection"
width: 6

但是,以下是返回的new_section变量的_data节点:

_data: Object
  contact_form_fields: Array[0]
  created_at: "2014-10-27T11:14:39.000Z"
  deleted_at: null
  gallery_images: Array[0]
  heading_visible: false
  height: null
  html: "<p>New section</p>"
  id: 21
  position: 3
  row: null
  section_type_id: 19
  section_type_type: "TextSection"
  style: null
  updated_at: "2014-10-27T11:14:39.000Z"
  width: 6

在这里,您可以看到行值为空。

我很难(大)试图弄清楚这个问题发生在哪里。这可能与Ember数据更新有关(这最初是使用更旧的版本构建的)但我担心我没有知识可以理解发生了什么变化以及为什么会发生这种变化。

任何人都可以提供的帮助非常有用,谢谢。

1 个答案:

答案 0 :(得分:0)

一方面,您正在查找错误的位置以查找row,在_relationships对象中有另一个键,您应该在row找到_data,而不是var store = this.get('store'); new_section_data.width = this.getNewSectionWidth(row); new_section_data.position = this.getNewSectionPosition(row); var new_section = store.createRecord('section', new_section_data); new_section.set('row', row); }}

如果在创建记录后设置行,它是否有效?

{{1}}