Ember.js让控制器在视野中

时间:2013-11-15 23:12:42

标签: ember.js

我觉得这应该是非常简单的,但我无法在不同的视图中获取控制器的内容。这是我的代码:

App.MapView = Ember.View.extend({
    elementId: ['map-canvas'],
    didInsertElement: function() {
        var self = this;
        var controller = this.get('controllers.markers');
    }
});

如果我是console.log(控制器),我会得到未定义的。

在控制器中我会做类似的事情:

App.MarkersController = Ember.ArrayController.extend({
    needs: ['map']
});
App.MapController = Ember.ObjectController.extend({
   plot: function() {
      var markers = this.get('controllers.markers');
   }
});

1 个答案:

答案 0 :(得分:9)

您将需求放在需要另一个控制器的控制器上,以及您将访问另一个控制器的位置。

从视图中,为了抓取控制器,您执行this.get('controller')并且controllers对象存在于控制器上,因此controller.controllers.markers

此外,默认情况下,如果ember创建了视图,则默认情况下会使用控件创建视图;如果您正在执行类似{{view App.MapView}}的操作,而不是创建MapController并将其与之关联,则使用创建视图时在范围内的控制器。

App.MapView = Ember.View.extend({
  elementId: ['map-canvas'],
  didInsertElement: function() {
    var self = this;
    var controller = this.get('controller.controllers.markers');
  }
});

App.MarkersController = Ember.ArrayController.extend({

});
App.MapController = Ember.ObjectController.extend({
  needs: ['markers'],
  plot: function() {
   var markers = this.get('controllers.markers');
  }
});

查看它的实现:

http://emberjs.jsbin.com/ODuZibod/1/edit