在我的Ember CLI应用程序中,我有一条名为 insights 的路线。该路线扩展了 check-user 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('insights')从其他路线转换到路线或手动将页面刷新到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 函数。不知道为什么只有当我使用link-to helper时才打破它。我错过了什么?
答案 0 :(得分:0)
transitionToRoute
是一种控制器方法。路线上的方法是transitionTo
。
我认为你的行号可能会因为翻译而关闭。您可以从堆栈跟踪中看到错误是在setupController
内引发的。顺便说一句,如果你定义像setupController: function Insights$setupController() ...
这样的函数,你会得到更好的痕迹。
小观点:首先,我不知道为什么你很难定义_this
。其次,不要在setupController
进行此类检查; beforeModel
会更好。第三,我不是多余的=== true
的忠实粉丝。
查看FIX的评论 基本上,将setupController更改为beforeModel可以修复错误。