4

这是一个场景:

我在控制器初始化时加载数据。当加载完成时。我想根据负载数据调整容器元素的大小。那么问题来了,我如何访问控制器中的视图?

我知道我可以在视图中操作 dom,this.$()但是我如何访问控制器中的 dom 或如何访问控制器中的视图。我Ember.Router这里用。所以我不手动创建视图和控制器。

http://jsbin.com/oxudor/edit#javascript,html我在这里展示了一些代码示例。该代码无法执行,但它可以显示我的问题。我对有问题的代码做了一些评论。

4

2 回答 2

7

我认为你不应该在控制器中玩 dom。这打破了 MVC。也许一种解决方案是在视图中定义一个观察者,监听控制器的内容。在这个观察者中,然后玩 dom(你在视图中,所以没问题)。正如@pangratz 建议的那样,通过一些代码,也许我可以给你一个更完整的答案。

编辑:我认为您可以将轮播功能放在相关视图中,并观察 controller.loading 属性。在这里,您可以使用 this.$() 检索视图的 jquery 对象。

carousel: function() {
  var context = this.get('controller'), 
      self = this;

  if(context.get('loading') === false) {
    setTimeout(function() {
      var width = self.$('#page_wrapper').width(),
          num   = self.$('.page').size();
      self.$('#pages').width(width * num);
      self.$('.page').width(width);
      console.log([width, num]);
      console.log(context.get('elements'));
    }, 100);
  }
}.observes('controller.loading')

希望这有助于...

于 2012-07-17T07:05:51.217 回答
0

现在您可以使用修饰符,安装Ember-midifier 库并查看本教程Ember-Modifiers

于 2021-11-18T10:36:06.877 回答