2014-11-05 111 views
0

在我的Ember CLI應用程序中,我有一條名爲的洞察。該路線擴展了檢查用戶 mixin。只有當我使用Mixin時,Ember纔會導致路由問題。我該如何解決這個問題?

/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

我認爲你的行號可能因爲翻譯而關閉。您可以從堆棧跟蹤中看到錯誤正在setupController內部拋出。順便說一句,如果你定義你的功能,如setupController: function Insights$setupController() ...,你會得到更好的痕跡。

小問題:首先,我不知道你爲什麼不打算定義_this。其次,不要在setupController中做這種檢查; beforeModel會更好。第三,我不是多餘的=== true的粉絲。

查看FIX的註釋 本質上,將setupController更改爲beforeModel可以修復該bug。

+0

我聲明_this處理if語句中的某些東西,它說'//在這裏做一些事情'。由於jQuery,_this是必需的。改變了transitionTo。感謝那。 – Nag 2014-11-05 03:50:58

+0

@Nagarjun,並解決了這個問題? – 2014-11-05 03:54:47

+0

將setupController更改爲beforeModel似乎已修復該錯誤,但它引入了另一個錯誤。現在,我的腳本正在呈現登錄路由,因爲this.get('userAuthenticated')的值似乎是錯誤的。記住userAuthenticated是Mixin檢查用戶內部的一個屬性。 userAuthenticated的值在另一個也使用該mixin的頁面上設置爲true。當有人使用鏈接助手時,不要混入屬性值? – Nag 2014-11-05 03:55:41

相關問題