Ember.js emberjs:在应用程序初始化()之后添加路由

Ember.js emberjs:在应用程序初始化()之后添加路由,ember.js,router,Ember.js,Router,在使用emberjs构建基于路由器的应用程序时,我遇到了以下问题。我的应用程序简化结构如下: var App = Em.Application.create({}); App.ApplicationController = Em.Controller.extend({}); App.ApplicationView = Em.View.extend({ template : Em.Handlebars.compile('APPLICATION TEMPLATE') });

在使用emberjs构建基于路由器的应用程序时,我遇到了以下问题。我的应用程序简化结构如下:

var App = Em.Application.create({});

App.ApplicationController   = Em.Controller.extend({});

App.ApplicationView = Em.View.extend({

    template    : Em.Handlebars.compile('APPLICATION TEMPLATE')

});


App.RootState   = Em.Route.extend({

    index   : Em.Route.extend({
        route   : "/"
    })

})

App.Router  = Em.Router.extend({

    root    : App.RootState

});

    // initialize the app here
App.initialize();

// extend the RootState from anywhere. eg. from a plugged widget 
App.RootState.reopen({

    login   : Em.Route.extend({
        route   : "/state1"
    })

});

//App.initialize(); //init the app a second time forces unexpected behaviour 

App.RootState.reopen({

    alarms  : Em.Route.extend({
        route   : "/state2"
    })

});

//App.initialize();
就像我的应用程序演示的那样,我尝试在运行时用新路由扩展路由器。我知道存在另一个类似问题的线程,但讨论的示例不适用于我。 如何在运行时使用其他路由扩展路由器,而不在每次…重新打开({})后调用initialize()

执行此操作的背景是在运行时决定应用程序的外观,例如,使用不同的wiget路由插入不同的wiget

问候,,
T

您能描述一下您的代码出现了什么样的问题吗?新定义的路线是否可访问?控制器不可用吗?好的。我的问题如下。重新打开RootState后,我无法访问要添加到路由器的新属性(即路由)。我必须再次调用initialize-方法才能获得访问权限。但是通过这样做,应用程序会两次进入init状态,例如,我的applicationView会被绘制两次。你能跟踪我的执行吗?我不知道重新打开是如何工作的,但我认为当你在类上调用重新打开时,新的行为在新实例上可用,但在已经定义的实例上不可用。因此,在初始化时,定义了整个路由器。不幸的是,我认为您试图做的(在运行时定义新路由)是不可能的…根据,您似乎应该使用
重新打开类
,而不是
重新打开
,如图所示。您能描述一下您的代码出现了什么样的问题吗?新定义的路线是否可访问?控制器不可用吗?好的。我的问题如下。重新打开RootState后,我无法访问要添加到路由器的新属性(即路由)。我必须再次调用initialize-方法才能获得访问权限。但是通过这样做,应用程序会两次进入init状态,例如,我的applicationView会被绘制两次。你能跟踪我的执行吗?我不知道重新打开是如何工作的,但我认为当你在类上调用重新打开时,新的行为在新实例上可用,但在已经定义的实例上不可用。因此,在初始化时,定义了整个路由器。不幸的是,我认为您试图做的事情(在运行时定义新路由)是不可能的…根据,您似乎应该使用
重新打开类
,而不是
重新打开
,如图所示