0

我是 BackboneJS 的新手,我正在开发一个在其中一个视图中有幻灯片的小应用程序。我不确定将在视图中启动幻灯片的代码放在哪里。

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

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

如果我把它放在 jQuery 就绪处理程序中(BackboneJS 应用程序之外),它只会让幻灯片放映一次,并且它自然不会继续工作,因为视图被重新渲染。

无论出于何种原因,如果我将代码放入视图的渲染函数中,我也不会让它工作(我想知道这是否是个好主意):

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

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

谢谢!

4

1 回答 1

1

看起来 SlidesJS 需要渲染所有内容并在 DOM 中执行它的操作,这可能是因为它需要大小和位置信息来排列幻灯片;我在 Google Maps 上遇到过类似的问题,解决方案是将绑定推迟到将视图添加到 DOM之后:el

var $slides = this.$(...);
setTimeout(function() {
    $slides.slides()
}, 0);

然后调用者将:

$something.append(v.render().el);

使用setTimeout零超时是在浏览器控制并更新 DOM 之后运行某些东西的技巧。你也可以使用_.defer

_(function() { $slides.slides() }).defer();

但这只是一种奇特的调用方式setTimeout

这种方法的缺点是您假设调用者将调用您的视图render,然后立即将您添加el到 DOM。不过,这并没有太大的缺点,这x.append(v.render().el)是标准的 Backbone 用法。

这种东西闻起来有点笨拙,但它很安全,有时您必须笨拙地解决问题。

于 2012-10-22T21:50:31.200 回答