2014-06-06 4 views
0

모델을 찾은 후에 어떻게 추가 모델 속성을 추가 할 수 있습니까? (또는 어떻게 내가 setupController에서 경로의 PARAMS 액세스 할 수 있습니까?엠버 앱 키트, 추가 모델 속성 설정

/routes/gallery.js

export default Ember.Route.extend({ 
    model: function(params) { 
     return this.store.find('monkeys', { monkeyType: params.gallery_id }); 
     //can I add an additional property to the returned model here? 
    }, 

    setupController: function(controller, model) { 
     var pageTitle = 'something related to params.gallery_id'; 
     //can I access route params in here? 
     this.controllerFor("application").set('pageTitle', pageTitle); 
     controller.set('model', model); 
    } 
}); 

가 이상적으로 내가하는 응용 프로그램 컨트롤러의 pageTitle 속성을 설정하려는 경로

this.resource('gallery', { path:'/gallery/:gallery_id' }); 

와 라우터에게 주어진 일부 gallery_id 특정 문자열은 API 서비스에서 반환하지 않습니다.

api는 URL을 /monkeys?monkeyType=someId

{ "monkeys":[{ ... }, { ... }] } 

답변

1

이 같은 아마 뭔가를 기반으로, 다음?

export default Em.Route.extend({ 
    model: function(params) { 
     var model = this.store.find('monkeys', { monkeyType; params.gallery_id }); 

     model.then(function(models) { 
      this.controllerFor('application').set('pageTitle', models.get('firstObject.name')); 
     }.bind(this)); 

     return model; 
    } 
}); 

model하지then 호출에 의해 반환 약속을 반환하고 있는지 확인합니다. store.find()PromiseArray을 반환하고 then()은 약속 만 반환합니다.

+0

입력 해 주셔서 감사합니다. 비록 제가 pageTitle이'this.store.find (...) '에서 반환 된 후에 모델에없는 params.gallery_Id를 사용하기 때문에 발생했습니다. – RYFN

+0

Id 그것이 어떻게 문제인지를 알지 못한다. Javascript는 클로저를 가지고 있으며,'params.gallery_id'가 원시적 일 가능성이 높으므로 원하는 중첩 된 함수에서 사용할 수 있습니다. – GJK

0

는 여기에 내가 함께 결국 한 내용은 다음과 같습니다

export default Ember.Route.extend({ 
    model: function(params) { 
     return return { 
      tag:params.gallery_id, 
      monkeys:[] 
     }; 
    }, 
    setupController: function(controller, model) { 
     var url = window.ENV.api + 'monkeys?monkeyType=' + model.tag; 

     if(model.monkeys.length === 0){ 
      $.getJSON(url, function(json){ 
       model.monkeys.pushObjects(json.monkeys); 
      }); 
     } 

     this.controllerFor("application").set('pageTitle', 
      this.getTitle(model.tag)); 

     controller.set('model', model); 
    }, 
    getTitle: function(tag){ 
     //some arbitrary non-api lookup 
    } 
}); 

나는 아마 엠버 데이터를 사용한다 버전이 솔루션 너무 치열하지 않다, 그래서 개선 듣고 행복 할 것이다, 또는.