0

我看到一些奇怪的行为,希望有人能解释一下。

从主干视图中的渲染方法,我一直在尝试执行以下操作:

this.$(".msg").colorbox();

this.$el.find(".msg").colorbox();

然而,在这两种情况下,虽然 msg 元素都已定位,但当尝试在返回的元素上调用 colorbox 方法时,我得到一个未定义该方法的异常。

但是,当我使用:

$(this.el).find(".msg").colorbox();

一切都很好。有人知道为什么会这样吗?

4

2 回答 2

2

这是一个常见的问题。当然 colorbox 是一个 jQuery 插件。jQuery 插件被注入,直到视图的元素被添加到页面的 DOM 中。

我的意思是,您的代码因自然行为而失败是正常的。

$('body').append( view.render().el );

但如果你这样做,它会起作用:

$('body').append( view.el );
view.render();

第三方 Backbone.js 插件有一个名为 onRender 的方法,该方法在渲染视图后执行(并假设已添加到 DOM)。但是,如果您不使用其他 Backbone.js 插件,请确保调用颜色框,直到您的视图被添加到 DOM。

于 2012-08-08T14:57:00.130 回答
0

在黑暗中拍摄...

this.$el并且$(this.el)是不同的实例,即使两者都引用相同的 DOM 元素。

也许从 Backbone 进行预编译this.$el = $(this.el)的那一刻到您调用this.$el.colorbox()某事的那一刻已经发生了,所以这个函数不可用并且它在实例中从未可用过this.$el

我不知道是什么,colorbox()但如果这是第三方 jQuery 插件的一部分,那么加载 JS 代码的顺序可能很重要?

于 2012-08-06T20:30:17.097 回答