是否可以使用App .__ container __。lookup来访问实例?

时间:2013-07-24 15:58:23

标签: view ember.js

我需要从另一个视图访问ApplicationView,我可以使用App.__container__.lookup('view:application')这样做。

__container__是否打算以这种方式使用?

是否有更好的方法来访问视图实例?

(更新) 我的用例:

  • 我的ApplicationView有一个包含2列的模板。
  • CSS具有响应性,因此列的大小会发生变化以适应 页面宽度。
  • 我正在使用Ember List View,需要在初始化期间指定高度和宽度
  • 我想获取实例,以便我可以访问DOM对象来确定其大小
  • 我无法使用Ember.View.views,因为此时,ApplicationView尚未插入DOM

1 个答案:

答案 0 :(得分:1)

不要使用它。其中一位核心开发人员表示,只要有人试图使用App.__container__,他就会添加另一个下划线。

如果您真的想要访问Ember.View,请使用Ember.View.views['foo']。其中foo是视图实例的elementId

因此,例如,如果您想要App.ApplicationView实例:

App.ApplicationView = Ember.View.extend({
  elementId: 'application'
});

// somewhere else in your code
var applicationViewInstance = Ember.View.views['application'];

话虽如此,我从未遇到过需要访问这样的视图实例的情况。如果您可以发布您的用例,我可以建议其他方法。


UPDATE :您想要从其他视图实例(视图高度和宽度)访问视图实例的某些属性。您可以将这些属性传递给控制器​​,让其他控制器访问它们以便在其他视图中使用它们(源视图 - >源控制器 - >其他一些控制器 - >其他视图):

App.ApplicationView = Ember.View.extend({
  didInsertElement: function() {
    var controller = this.get('controller'),
        height = this.$().height(),
        width = this.$().width();

    controller.setProperties({
      height: height,
      width: width
    });
  }
});


App.SomeotherController = Ember.Controller.extend({
  needs: ['application'],

  applicationViewWidthBinding: 'controllers.application.width',
  applicationViewHeightBinding: 'controllers.application.height'
});


App.SomeOtherView = Ember.View.extend({
  // assuming its controller is an instance of App.SomeotherController

  applicationViewWidthBinding: 'controller.applicationViewWidth',
  applicationViewHeightBinding: 'controller.applicationViewHeight'
});