【问题标题】:Calling a controllers method in another controller Ember在另一个控制器 Ember 中调用控制器方法
【发布时间】:2014-04-04 11:16:53
【问题描述】:

我正在使用 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);
        }

    }

});

我该如何解决?

【问题讨论】:

    标签: ember.js ember-controllers


    【解决方案1】:

    test 在技术上不是一种方法,而是一个动作或事件。请改用send 方法:

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

    【讨论】:

    【解决方案2】:

    根据 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')
    });
    

    你可以找到更多documentation about Ember.inject here

    【讨论】:

    • 对于浏览网络的用户,这个答案对于运行 Ember 2.x 及更高版本的应用程序最准确。
    【解决方案3】:

    来自更新的 Ember 文档:

    import { inject } from '@ember/controller';
    export default Ember.Controller.extend({
      appController: inject('application')
    });
    

    更多参考可以通过这个链接https://guides.emberjs.com/release/applications/dependency-injection/#toc_ad-hoc-injections了解

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多