【问题标题】: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')
希望对您有所帮助...