2013-07-23 2 views
1

내가 작업하고있는 앱에는 사용자가 자신과 친구의 이벤트를 볼 수있는 이벤트 페이지가 있으며 인라인 이벤트 작성자를 사용할 수 있습니다 (이벤트를 만들려면 그 동일한 페이지/경로). 좀 더 정확하게하려면 이벤트가 모두로드되고 뉴스 피드 스타일로 표시됩니다. 이제는 완벽하게 작동하지만 문제는 새로운 이벤트 모델을 저장하려고 할 때입니다. 나는 어떤 코드가 이것을 이해하기 쉽게 만들 것이라고 생각한다. 라우트 : 동일한 경로/리소스에서 EmberData 모델을 만들고 표시합니다.

this.resource('newsfeed', function() { 
    this.route('personal'); 
    this.route('whatever'); 
}); 

NewsfeedIndexRoute의 응용 프로그램은 뉴스 피드 /에서 ArrayController 모든 이벤트를 표시

model: function() { 
    return App.Event.find(); 
} 

있습니다. 그건 잘 작동합니다.

Furthermroe 앱에있는 NewsfeedRouteController뿐만 아니라 이벤트 제작자가 모든 하위 경로에 우리는 다음과 같은 코드가 이벤트 절약에 액세스 할 수 있도록 : 지금 그래서 문제

App.NewsfeedRoute = Ember.Route.extend({ 
    setupController: function(controller){ 
     controller.newRecord(); 
    } 
}); 

App.NewsfeedController = Em.ObjectController.extend({ 
    newRecord: function() { 
     //The following line works but makes the API 'dirty' and an extra model needs to be created 
     this.set('content', App.Newsfeed.createRecord({title: "new title"})); 

     //The next line would be preferred, but overrides the displayed models at /newsfeed 
     //this.set('content', App.Event.createRecord({title: "new title"})); 
    }, 
    save: function() { 
     this.get('model').save(); 
    } 
}); 

을, 내가/newsfeed에 가서 this.set('content', App.Event.createRecord({title: "new title"}));이라는 줄을 사용하면 newsfeed/index.hbs 템플릿에 표시되는 모든 것을 재정 의하여 하나의 모델로 표시하므로 ('새 제목'만 표시) 그리고 짝수 작성자에게 더 많이 입력하면 표시됩니다. 이것은 분명히 우리가 원하는 행동이 아닙니다. 이상적으로는 어떻게 든 분리되어야하며 서버에 저장되어야합니다. Newsfeed 모델에서 볼 수있는 다른 줄은 해결 방법이며 제대로 작동하지만 POST에서/events 끝점을 사용하기 때문에 주석에 언급 된 것처럼 실제로 해킹 된 것처럼 느껴지며 API를 더러워지게 만듭니다. 요청은 훨씬 더 쉬울 것입니다.

그럼 ember-data로 지금 당장 달성 할 수있는 방법이 있다면 누구나 생각해 볼 수 있습니까?

답변

2

여러 가지 방법으로이를 수행 할 수 있습니다. 당신이 좋은 해결책에 가깝지만이 경우 누락 된 것은 EventController입니다. 너는 App.NewsfeedController에 있었던 것과 많이 비슷하게 보일 것입니다.

App.EventController = Em.ObjectController.extend({ 
    newRecord: function() { 
    this.set('content', App.Event.createRecord({title: "new title"})); 
}, 
    save: function() { 
    this.get('model').save(); 
    } 
}); 

이제 템플릿에서

{{render event}} 

을 추가하고 event.hbs 템플릿을 정의 할 수 {{render}} 도우미를 사용합니다.

+0

감사합니다. 훌륭하게 작동합니다. – Markus

관련 문제