只有当我使用Mixin时,Ember才会导致路由问题.我该如何解决此问题

Ember causes a routing issue only when I use a Mixin. How do I resolve this?

本文关键字:问题 路由 何解决 解决 Mixin Ember      更新时间:2023-09-26

在我的Ember CLI应用程序中,我有一个名为insights的路由。该路由扩展了check用户mixin。

/routes/inspections.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函数。不知道为什么只有当我使用到helper的链接时它才会在那里中断。我错过了什么?

transitionToRoute是一个控制器方法。路由上的方法是transitionTo

我想你的线路号码可能是因为转译的缘故。您可以从堆栈跟踪中看到,错误是在setupController内部抛出的。顺便说一句,如果你像setupController: function Insights$setupController() ...那样定义你的函数,你会得到更好的跟踪。

小问题:首先,我不知道你为什么要费力地定义_this。第二,不要在setupController中进行这种检查;CCD_ 7会更好。第三,我不太喜欢冗余=== true

查看修复评论从本质上讲,将setupController更改为beforeModel修复了这个错误。