2013-07-19 1 views
1

, 내가 지금처럼 중첩 된 자원 라우터가 완료 :내 엠버 응용 프로그램에서

App.Router.map(function() { 
    this.resource('explore', function() { 
    this.resource('building', { path: 'building/:slug' }); 
    this.resource('country', { path: ':slug' }, function() { 
     this.resource('state', {path: ':slug' }); 
    }); 
    }); 
}); 

App.CountryRoute = Ember.Route.extend(App.SlugRouter, { 
    setupController: function(controller, country) { 
    controller.set('title', 'country detail'); 
    controller.set('model', country); 
    } 
}); 

App.SlugRouter = Ember.Mixin.create({ 
    serialize: function(model, params) { 
     var name, object; 
     object = {}; 
     name = params[0]; 
     object[name] = model.get('slug'); 
     return object; 
    } 
}); 

App.Building = DS.Model.extend({ 
    country: DS.belongsTo('App.Country'), 
    name: DS.attr('string'), 
    slug: DS.attr('string') 
}); 

App.Country = DS.Model.extend({ 
    name: DS.attr('string'), 
    slug: DS.attr('string'), 
    buildings: DS.hasMany('App.Building'), 
    states: DS.hasMany('App.State') 
}); 

이 (가) 경로를 찾아로드 건물의 목록을 서버에서받은 보여줍니다 (장고 -rest-framework app), 각 건물은 belongsTo 속성이있는 국가와 관계가 있습니다. explore.index 경로에서

, 나는 {{linkTo this.country}}를 사용하여, 각 건물에 대한 국가 경로에 대한 링크, 건물의 목록을 표시합니다. 그러나 href는 #/explore/<country-name> 대신 #/explore/undefined으로로드됩니다.

나를 혼동되는 부분이 만 나는 목록을로드 처음 일 것입니다. 다른 경로로 가서 #/explore으로 돌아 오면 링크가 올바르게 렌더링됩니다.

디버거에서 serialize 메서드에 중단 점을 넣으면 처음으로 페이지를로드 할 때 모델 개체가 비어있는 것을 볼 수 있습니다 (_data.attributes는 빈 개체 임). 디버거에서 네트워크 탭으로 이동, 내가 요청이 국가 데이터를 얻을 수있는 서버에 적용된 것을 볼 수 있지만 반응은 아직 접수되지 않았습니다

server response not received yet

응답이 결국 수신 {{this.country.name}}은 올바르게 렌더링되었지만 너무 늦은 이후입니다.

미리 답변 해 주셔서 감사합니다.

내가 사용하고 있습니다 : 엠버 : 1.0.0-rc.5, 핸들 바 : 1.0.0-rc.4, jQuery를 : 1.8.3, 엠버 데이터 : 0.13, 엠버 - 데이터 장고 -rest 어댑터 :

답변

2

0.13은 첫째로 당신은 그것의 정의 전에 App.SlugRouter에 혼합된다. 콘솔에 Assertion failed: Expected hash or Mixin instance, got [object Undefined]과 같은 오류가 표시되어야합니다.

그 후 당신은 슬러그에 의해 국가의 모델을로드해야합니다. 나는 너의 노선에서 이것을 보지 않는다. 영속성 라이브러리에 따라 CountryRoute에서 이와 같은 것이 필요합니다.

model: function(params) { 
    return App.Country.find({slug: params.slug}); 
} 

나는 색인 경로 모델을로드하고 linkTosetupController에에 전달되기 때문에 지금 노력하고 부품이 의심. 중첩 페이지를 직접로드하려면 해당 경로의 모델 훅을 구성해야합니다.

+0

2 가지 :; 이미 모델을 설정'CountryRoute.setupController'에''controller.set ('모델', 국가)를 사용하지 않는 이유는 무엇입니까? 또한, [문서]에 따라 (http://emberjs.com/api/classes/Ember.Route.html#method_model), 후크는 LINKTO 사용시 호출되지 않는다. 응답 해 주셔서 감사합니다! – majdal

+0

1.': slug' 경로에 직접있을 때 이전 경로가없는 새로운 페이지에 있으므로 이전 모델이로드되지 않았습니다. 따라서 모델 후크가 필요합니다. 2. 올바른 경우, 훅은 직접 경로의 경우에만 사용되며, 모델에서 인수로 전달하는'linkTo '와 함께 사용됩니다. –

+0

제안 된 솔루션은 문제를 해결하지 못합니다 :'CountryRoute'에서 제안 된 모델을 정확하게 정의하고'controller.set ('model', country);를 주석 처리하면 여전히 같은 오류가 발생합니다. – majdal