2014-11-05 2 views
0

Ember CLI 응용 프로그램에서 통찰력이있는 경로가입니다. 이 경로는 확인 사용자 mixin을 확장합니다.Ember는 Mixin을 사용할 때만 라우팅 문제를 발생시킵니다. 어떻게 해결할 수 있습니까?

/routes/insights.js :

import Ember from 'ember'; 
import CheckUser from 'client-web/mixins/check-user'; 

export default Ember.Route.extend(CheckUser, { 
setupController: function(controller, model) { 
    var _this = this; 

    if (this.get('userAuthenticated') === true) { 
     // Do some stuff here 
    } else { 
     _this.transitionToRoute('sign-in'); 
    } 
}, 

getToday: function() { 
    var today = new Date(), 
     dd  = today.getDate(), 
     mm  = today.getMonth() + 1, 
     yyyy = today.getFullYear(); 

    if (dd < 10) dd = '0' + dd; 
    if (mm < 10) mm = '0' + mm; 

    today = mm + '/' + dd + '/' + yyyy; 

    return today; 
}, 

getTomorrow: function() { 
    var toDate = new Date(this.getToday()); 
    toDate.setDate(toDate.getDate() + 1); 

    var day   = toDate.getDate(), 
     month  = toDate.getMonth() + 1, 
     year  = toDate.getFullYear(); 

    if (day < 10) day = '0' + day; 
    if (month < 10) month = '0' + month; 

    var tomorrow = month + '/' + day + '/' + year; 

    return tomorrow; 
} 
}); 

내가 this.transitionTo를 사용하여 다른 경로에서 경로로 전환 ('통찰력') 또는 수동으로 myapplication.com/insights에 페이지를 새로 고침 할 때, 모든 것이 잘 작동하고이 경로는 내가 지정한 템플릿을 렌더링합니다. 그러나 통찰력 경로에 연결하는 데 {{link-to}} 도우미를 사용하는 일부 링크가 템플릿에 있습니다. 사용자가 해당 링크 중 하나를 클릭하면, 다음과 같은 오류가 발생합니다 :

Error while processing route: insights undefined is not a function TypeError: undefined is not a function 
at __exports__.default.Ember.Route.extend.setupController (client-web/routes/insights.js:15:14) 
at apply (http://localhost:3000/assets/vendor.js:21144:27) 
at superWrapper [as setupController] (http://localhost:3000/assets/vendor.js:20721:15) 
at EmberObject.extend.setup (http://localhost:3000/assets/vendor.js:51254:18) 
at handlerEnteredOrUpdated (http://localhost:3000/assets/vendor.js:54266:36) 
at http://localhost:3000/assets/vendor.js:54235:18 
at forEach (http://localhost:3000/assets/vendor.js:55303:54) 
at setupContexts (http://localhost:3000/assets/vendor.js:54234:9) 
at finalizeTransition (http://localhost:3000/assets/vendor.js:54404:9) 
at http://localhost:3000/assets/vendor.js:53954:20 

문제의 라인 (15)이 getToday 기능입니다. 헬퍼에 링크를 사용할 때만 왜 그곳에 침입했는지 확신 할 수 없습니다. 내가 뭘 놓치고 있니?

답변

0

transitionToRoute은 컨트롤러 방법입니다. 노선에 대한 방법은 transitionTo입니다.

나는 transpilation 때문에 당신의 라인 번호가 꺼져 있다고 생각합니다. setupController 안에 오류가 던져지고 있음을 스택 추적에서 확인할 수 있습니다. 그런데 setupController: function Insights$setupController() ...과 같은 함수를 정의하면 더 좋은 결과를 얻을 수 있습니다.

사소한 점 : 첫째, 왜 귀찮게 정의 하시겠습니까? _this. 둘째, setupController에서 이런 종류의 수표를하지 마십시오. beforeModel이 좋습니다. 셋째, 이중화에 대한 큰 팬이 아닙니다. === true.

수정 사항보기 기본적으로 setupController를 beforeModel로 변경하면 버그가 수정되었습니다.

+0

나는 '여기에 물건을 좀해라.'라고 쓰여있는 if 문에 몇 가지 내용을 처리하도록 선언합니다. _이 것은 jQuery 때문에 필요합니다. 전환을 변경했습니다. 고마워. – Nag

+0

@ Nagarjun이 문제를 해결 했습니까? –

+0

setupController를 beforeModel로 변경하면 해당 버그가 수정 된 것으로 보이지만 다른 버그가 추가되었습니다. 이제는 내 스크립트가 this.get ('userAuthenticated') 값이 false로 표시되어 로그인 경로를 렌더링하고 있습니다. userAuthenticated가 Mixin check-user 내부의 속성이라는 것을 기억하십시오. userAuthenticated의 값은 해당 믹스 인을 사용하는 다른 페이지에서 true로 설정됩니다. 다른 사람이 링크 - 도우미를 사용할 때 속성 값을 mixin하지 마십시오. – Nag