我正在使用backbone.js创建一个页面应用程序。我是新来的骨干,所以请原谅任何错误的语义学。
我的问题是在呈现视图时。
最初,我的index.html中有一个javascript来执行一些dom操作(图像滑块)。
JS被包装在$(window).load()中,所以在启动时一切都很好。除非从url加载页面,否则代码显然不会执行。代码不会从主干视图或路由器上运行。因此,页面在没有dom操作的情况下加载。
我尝试将我的代码插入视图中的呈现和初始化函数中,但没有结果。我应该把这段代码添加到路由器吗?这似乎是个小插曲。
我应该在哪里包括“多姆准备”代码?和/或是否有更好的方法来管理主干网负载上的视图及其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});
});
},
});发布于 2012-10-27 19:23:53
我找到了解决办法。在我的路由器功能中注释掉if语句之后,事情进展顺利。
home: function () {
// if (!this.homeView) {
this.homeView = new HomeView();
// }
$('#main-content').html(this.homeView.el);
this.homeView.startOrbits();
this.headerView.selectMenuItem('home');
},我意识到这意味着我在每一个失败触发器上都创建了一个新的视图。请随时提供更多的最佳解决方案。
发布于 2012-10-27 00:20:15
但是当我回到另一个视图时,代码显然不会让人兴奋
我不太清楚那是什么意思。撇开“兴奋”部分不谈,您不会“转到”视图;视图只是将元素添加到页面或向现有元素添加逻辑的方法。
如果我不得不猜测的话,我可以想象您正在使用主干路由器在虚拟“页面”之间移动(使用视图创建这些页面)。如果是这样的话,您需要查看主干路由器事件:
http://documentcloud.github.com/backbone/#Router
http://documentcloud.github.com/backbone/#FAQ-events
具体来说,我认为您希望将事件处理程序(在路由器上)绑定到“路由:nameOfYourRoute”或“just : page”(如果您希望在每个虚拟页面负载上触发您的逻辑)。
希望这有帮助,如果我的猜测是错误的,请编辑你的问题澄清。
https://stackoverflow.com/questions/13095780
复制相似问题