【问题标题】:How can i manipulate dom in controller in emberjs?如何在 emberjs 的控制器中操作 dom?
【发布时间】:2012-07-17 05:52:16
【问题描述】:

这是一个场景:

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

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

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

【问题讨论】:

    标签: javascript view controller ember.js


    【解决方案1】:

    我认为你不应该在控制器中玩 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')
    

    希望对您有所帮助...

    【讨论】:

    • 这就是我需要的。非常感谢:-)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-05
      • 2014-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 2016-09-01
      • 1970-01-01
      相关资源
      最近更新 更多