我在何处以及如何在BackboneJS应用程序中实现SlidesJS?

时间:2012-10-22 20:32:30

标签: jquery backbone.js

我是BackboneJS的新手,我正在开发一个在其中一个视图中有幻灯片显示的小应用程序。我不知道在视图中放置启动幻灯片的代码的位置。

我正在使用 SlidesJS ,我想知道在哪里抛出此代码:

$("#slides").slides();

如果我把它放在jQuery就绪处理程序中(在BackboneJS应用程序之外),它只会使幻灯片显示一次,并且在重新呈现视图时它自然不会继续工作。

无论出于何种原因,如果我将代码置于视图的渲染功能中,我也无法让它工作(并且我想知道它是否是一个好主意)之一:

render: function() {
    this.$el.html(this.template());
    this.$("#slides").slides();
    return this;
}

在BackboneJS中实现SlidesJS或jQuery工具的最佳位置在哪里?

谢谢!

1 个答案:

答案 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使用。

这种东西闻起来有点混乱,但它非常安全,有时你不得不克服问题。