1

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

__container__打算用这种方式吗?

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

(更新) 我的用例:

  • 我的 ApplicationView 有一个包含 2 列的模板。
  • CSS 是响应式的,因此列的大小会发生变化以适应页面的宽度。
  • 我正在使用Ember 列表视图,它需要在初始化期间指定高度和宽度
  • 我想获取实例,这样我就可以访问 DOM 对象来确定它的大小
  • 我不能使用 Ember.View.views 因为那时 ApplicationView 还没有被插入到 DOM
4

1 回答 1

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'];

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


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

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'
});
于 2013-07-24T16:05:50.083 回答