在Ember中调用另一个控制器的方法

8

我正在使用Ember的Need Api来调用另一个控制器中的方法。我能够获得该控制器的实例,但是当我调用它的方法时,会返回这个错误:TypeError: Object [object Object] has no method.

这是我如何调用它的:

Cards.CardsIndexController = Ember.Controller.extend({
    needs: 'account_info',
     actions: {
        accountInfoStart:function(){
               console.log(this.get('controllers.account_info').test()); // error here


        }
    }
});

这是我想要调用的控制器函数

Cards.AccountInfoController = Ember.Controller.extend({


    actions:{

        test: function(){

            alert(1);
        }

    }

});

我该如何解决这个问题?

3个回答

12

test并不是一个方法,而是一个操作或事件。请使用send方法替代:

this.get('controllers.account_info').send('test', arg1, arg2);

对于那些需要处理嵌套文件夹的人,这里有一个解决方案:http://stackoverflow.com/a/29269015/499700 - poweratom

5
根据Ember文档,创建一个惰性查找容器中其他控制器的属性。这只能在定义另一个控制器时使用。
传统的Ember应用程序示例:
App.PostController = Ember.Controller.extend({
  accountInfo: Ember.inject.controller()

  this.get('accountInfo').send('test')
});

现代化的Ember应用示例:
// in an ember app created with ember-cli
// below snippet would be the app/controllers/post.js file
import Ember from 'ember';
export default Ember.Controller.extend({
  appController: Ember.inject.controller('application')
});

您可以在这里找到有关Ember.inject的更多文档


2
对于在网络上浏览的用户来说,这个答案最准确的是适用于运行 Ember 2.x 及以上版本的应用程序。 - user918510

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接