0

면책 조항 :이 jsfiddle 만들려고했지만 RESTAdapter 공용 소스없이 실제로 작동하도록 만들 수 없습니다.상위 모델에 새로운 많은 관계를 추가하는 방법은 무엇입니까?

나는 hasMany 자식 모델 배열을 가진 모델을 가지고 있습니다. 이 하위 배열에 새 모델을 추가하고 서버에 저장해야합니다.

App.FooModel = DS.Model.extend({ 
    'name': DS.attr('string'), 
    'bars': DS.hasMany('App.BarModel') 
}); 

App.BarModel = DS.Model.extend({ 
    'name': DS.attr('string'), 
}); 

App.ApplicationController = Ember.Controller.extend({ 
    init: function() { 
    var foo = App.FooModel.find(101); // -- currently has bars[201, 202, 203] 
    var newBar = loadFixture(App.BarModel, 204); 

    var self = this; 
    setTimeout(function() { // -- just to be sure our models are loaded before we try this 
     // foo.currentState: saved 
     foo.get('bars').addObject(newBar); 
     // foo.currentState: saved 

     foo.store.commit(); // -- nothing happens 
    }, 1000); 
    } 
}); 

App = Ember.Application.create({ 
    store: DS.Store.create({ 
    revision: 11 
    }) 
}); 

아무 일도 일어나지 않습니다. 부모 모델이 더티로 표시되지 않으므로 저장소가 커밋을 시도하지 않습니다. 이 관계를 부모에게 추가해야하는 다른 방법이 있습니까? 이거 버그 야?

현재 해결 방법 :

foo.get('bars').addObject(newBar); 

var save = foo.get('name');  
foo.set('name', (save + '!')); 
foo.set('name', save); // -- this marks our record as dirty, so a save will actually happen 

foo.store.commit(); 

편집 1 : 나는 그것이 (https://stackoverflow.com/a/15145803/84762)로 시작하는 내장 된 경우 엠버 데이터는이 데이터를 직렬화 것을 알고 있어요,하지만 난 내를 재정의 이것을 처리하는 직렬화 기. 내가 가지고있는 문제는 상점이이 변경 사항을 저장하려고 시도조차하지 않으므로 우리가 시리얼 라이저에 도달하지 못한다는 것입니다.

편집 2 : 나는이 this bug와 함께 할 수있는 뭔가가이 힘을 의심하지만, 같은에서 그이 누군가를 위해 작동하지 않을 것입니다 의미와 나는 다른이로 실행 한 아무도 믿지 않는다 힘든 시간을 , 아직.

답변

1

일대일 관계를 모델링 한 것처럼 보이지만 belongsTo 옵션을 App.BarModel에 포함시키지 않은 것 같습니다. 이 링크를 체크 아웃 : 아이에`hasMany` 작동하지 않은 아이에`belongsTo` 추가

http://emberjs.com/guides/models/defining-models/#toc_one-to-many

App.Post = DS.Model.extend({ 
    comments: DS.hasMany('App.Comment') 
}); 

App.Comment = DS.Model.extend({ 
    post: DS.belongsTo('App.Post') 
}); 
+0

하지만했다. 그들이 둘 다 일하지 않았다는 것이 이상해 보입니다. 어쩌면 나는'belongsTo'에 대해서 뭔가 잘못된 일을했을 수도 있습니다. 어쨌든, 고마워요 - 아이와의 관계를 추가하는 것이 트릭을 한 것 같습니다. 나는 어딘가에 hasMany/null relationship/inverse가 지원되었다는 것을 기억하는 것 같습니다. 그렇지 않다면 계획이 있습니까? 내 특별한 경우, 자식'bar' 객체는 응용 프로그램에서 * 어디에서나 사용됩니다. 부모 객체를 저장하기 위해 자식 객체에 25 가지 다른 관계를 추가하고 싶지는 않습니다. – KOGI

+0

Github에는 inverse-null 브랜치가 있습니다. 아마 그들은 그것을 향해 일하고 있습니까? https://github.com/emberjs/data/tree/inverse-null – commadelimited

+0

OP에 링크 된 SO 질문에 대한 의견도 남겼습니다. 너가 그것을 검사 할 수 있으면, 그것은 좋을텐데! – KOGI

0

내가 이해하는 한, 당신은 관계의 embedded 기능을 사용하지 않았지만 bars 개체의 직렬화를 foo 개체로 처리하기 위해 serializer를 재정의했습니다.

나는 버그가 아마 여기에서 나온 생각 : 당신의 관계는 포함되어 있지 않으면 변경해야하는지 자신의 bars 협회에 개체를 추가 할 때와 같은 더러운 foo 개체를 표시하는 이유는 일반적으로 bar의 핵심 foo_id 거기 없다 추가 한 객체 인 경우 foo 객체를 API로 보내면 변경되지 않습니다.

관련 문제