2014-10-27 3 views
0

Я унаследовал приложение Ember.js, построенное на основе Rails API. Это было первоначально запущен следующим образом:Отношение модели Ember Rails

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 

используя Тлеющие рельсы камня.

При попытке сохранить модель раздела я попадаю в проблему большого блокатора. Каждая секция имеет отношение с моделью строки:

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

и модель строки в ответе:

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

Сохранение нового раздела выполняет следующую функцию в контроллере. Класс row отправляется и применяется к объекту до того, как этот объект отправляется в метод 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; 
}, 

Проблема возникает, как только создается модель. Строка на самом деле не применяется правильно к модели, и поэтому запрос API Rails не работает, и раздел не сохраняется.

Данные, содержащиеся в объекте new_section до запроса createRecord, как показано ниже:

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 

Тем не менее, следующее является _data узел из возвращаемой переменной new_section:

_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 

Здесь вы можете увидеть, что значение строки равно null.

У меня возникли трудности (большие), пытаясь выяснить, где эта проблема. Это может быть связано с обновлением данных Ember (это было первоначально построено с использованием более старой версии), но я боюсь, что у меня нет знаний, чтобы понять, что изменилось и почему это происходит.

Любая помощь, которую любой может предоставить, будет очень полезной, спасибо.

ответ

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);