【发布时间】:2012-10-26 23:40:07
【问题描述】:
我正在使用backbone.js 创建一个单页应用程序。我是主干新手,所以请原谅任何错误的语义。
我的问题是渲染视图时。
最初,我的 index.html 中有一个执行某些 dom 操作(图像滑块)的 javascript。
JS 包含在 $(window).load() 中,所以启动时一切正常。 除非从 url 加载页面,否则代码显然不会执行。代码不会从主干视图或路由器运行。所以页面在没有 dom 操作的情况下加载。
我尝试将我的代码插入到视图中的渲染和初始化函数中,但无济于事。我应该将此代码添加到路由器吗?这似乎有点骇人听闻。
我应该在哪里包含“dom ready”代码? 和/或是否有更好的方法来管理主干中加载的视图及其 dom 元素?
代码:
home.js
window.HomeView = Backbone.View.extend({
initialize:function () {
this.render();
},
render:function () {
$(this.el).html(this.template());
this.startOrbits();
return this;
},
startOrbits:function(){
$(window).load(function() {
$('#orbit-main').orbit({ fluid: '16x6', swipe:true });
$('#orbit-news').orbit({ fluid: '8x6', bullets: true, directionalNav:false, captions:true, advanceSpeed: 9000});
});
},
});
【问题讨论】:
-
您不应该能够在适当的
render方法中使用this.$('#orbit-main').orbit(...)吗?只需将#orbit-main放在this.$el之后即可。 -
@mu 太短:我在渲染函数中添加了 this.startOrbits,我也尝试在渲染()之后添加内部初始化; .代码在新视图仍然呈现之前运行。
-
仔细阅读我的评论:
$(x)和this.$(x)是不同的东西。$(x)仅在x在 DOM 中时有效,this.$(x)在x在this.el中时有效,即使this.el尚未添加到 DOM 中。 -
我不知道我能做到这一点。感谢您指出了这一点。不幸的是,这不起作用,我收到一个错误,说轨道不是函数。我确实在下面找到了解决方案。感谢您的意见。
标签: backbone.js backbone-views domready