我是BackboneJS的新手,我正在开发一个在其中一个视图中有幻灯片显示的小应用程序。我不知道在视图中放置启动幻灯片的代码的位置。
我正在使用 SlidesJS ,我想知道在哪里抛出此代码:
$("#slides").slides();
如果我把它放在jQuery就绪处理程序中(在BackboneJS应用程序之外),它只会使幻灯片显示一次,并且在重新呈现视图时它自然不会继续工作。
无论出于何种原因,如果我将代码置于视图的渲染功能中,我也无法让它工作(并且我想知道它是否是一个好主意)之一:
render: function() {
this.$el.html(this.template());
this.$("#slides").slides();
return this;
}
在BackboneJS中实现SlidesJS或jQuery工具的最佳位置在哪里?
谢谢!
答案 0 :(得分:1)
看起来SlidesJS需要所有渲染的东西,并且在它可以做它之前在DOM中,这可能是因为它需要大小和位置信息来排列幻灯片;我在谷歌地图上遇到了类似的问题,解决方案是推迟绑定,直到之后视图的el
被添加到DOM中:
var $slides = this.$(...);
setTimeout(function() {
$slides.slides()
}, 0);
然后调用者将:
$something.append(v.render().el);
在浏览器具有控制权并更新DOM之后,使用setTimeout
以零超时是一种运行方法。您也可以使用_.defer
:
_(function() { $slides.slides() }).defer();
但这只是一种调用setTimeout
的奇特方式。
这种方法的缺点是,您假设调用者会调用您的视图render
,然后立即将您的el
添加到DOM。这不是一个缺点,x.append(v.render().el)
是标准的Backbone使用。
这种东西闻起来有点混乱,但它非常安全,有时你不得不克服问题。