如何从另一个视图引用emberJS控制器

时间:2013-07-23 20:58:36

标签: ember.js

我正在为我的应用使用ember工具。现在我想添加一个TextField来触发我的控制器中的搜索,比如在this example.这是控制器和视图:

的ProductsController:

var ProductsController = Ember.ArrayController.extend({
  search: function(query) {
    console.log(query);
  }
});

module.exports = ProductsController;

SearchFieldView:

var SearchFieldView = Ember.TextField.extend({
  insertNewline: function() {
    var query = this.get('value');
    App.ProductsController.search(query);
  }
});
module.exports = SearchFieldView;

但是每当文本字段发生变化时,我都会遇到App.ProductsController没有方法search的错误。所以我感觉它不是我创造的那个,而是生成的那个。

2 个答案:

答案 0 :(得分:1)

您可以使用this.get('controller')获取当前控制器实例。或者如果你需要另一个控制器实例,你可以使用this.get('controller')。get('controllers.anothercontroller').. JSBin

希望它有所帮助。

答案 1 :(得分:0)

好的,我已经知道了。 App.ProductsController不是实际控制器的实例,因为路由下的所有视图都具有相同的控制器,只有this.get('controller')

var SearchFieldView = Ember.TextField.extend({
  insertNewline: function() {
    var query = this.get('value');
    this.get('controller').search(query);
  }
});
module.exports = SearchFieldView;