Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js:转换到嵌套路由调用哪个操作?_Ember.js_Controller_Nested_Routes - Fatal编程技术网

Ember.js:转换到嵌套路由调用哪个操作?

Ember.js:转换到嵌套路由调用哪个操作?,ember.js,controller,nested,routes,Ember.js,Controller,Nested,Routes,对于嵌套管线,我遵循了以下指南: 我有一个嵌套的路由: App.Router.map(function () { this.resource('account', function() { this.route('register'); }); }); 在我的索引模板中,我调用了我的索引控制器的一个操作,即: App.IndexController = Ember.Controller.extend({ actions: { doRegi

对于嵌套管线,我遵循了以下指南:

我有一个嵌套的路由:

App.Router.map(function () {
    this.resource('account', function() {
        this.route('register');
    });
});
在我的索引模板中,我调用了我的索引控制器的一个操作,即:

App.IndexController = Ember.Controller.extend({
    actions: {
        doRegistration: function(){
            this.transitionToRoute('account.register');
        }
    }
});
到目前为止,一切都正常工作,我的AccountRegisterController甚至被实例化,我想当以下内容登录到控制台时:

App.AccountRegisterRoute = Ember.Route.extend({
    setupController: function(controller, model){
        console.log('setting up controller'+controller);
    }
});
这是我的AccountRegisterController:

App.AccountRegisterController = Ember.Controller.extend({
    actions: {
        register: function(){
            console.log('account register');
        },
        index: function(){
            console.log('account index');
        }
    }
});

问题是控制器的两个动作都没有被调用。为什么?我怎样才能告诉
转换到(…)
调用什么操作?我做错了什么?

'transitiono'不需要动作,它只是改变了路线

为了执行代码,您可以在路由上的不同钩子中执行

你可以:

App.AccountRegisterRoute = Ember.Route.extend({
    beforeModel: function() {
        console.log('setting up controller'+controller);
        //write any register code here
    }
});
或者,您可以将操作发送到路由挂钩:

App.AccountRegisterRoute = Ember.Route.extend({
    beforeModel: function() {
        this.send('register');
        this.transitionTo('account.welcome');

    }
});
您可能希望首先执行操作,然后在没有中间路线的情况下进行转换。像这样:

App.IndexController = Ember.Controller.extend({
    actions: {
        doRegistration: function(){
            //code to register user here.
            this.transitionToRoute('account.welcome');
        }
    }
});
如果您希望能够重用注册控制器,可以将其定义为父控制器中的一个操作,该操作将弹出,就像您没有在子控制器或路由中定义它一样:

App.ApplicationRoute = Ember.Route.extend({
    actions: {
        doRegistration: function(){
            //code to register user here.
            this.transitionTo('account.welcome');
        }
    }
});

sry,我不明白。如果我将代码放入路由中的
beforeModel
,我如何知道是执行注册代码还是登录代码?我的控制器处理这两种情况,这就是为什么我的控制器中有多个操作。我不懂这个控制器。为什么我不能采取行动?我的意思是,
beforeModel
如何知道我是否要执行
indexAction
registerAction
的代码,正如它们在我的
AccountRegisterController
中定义的那样?