骨干选择器和使用查找

时间:2012-08-06 16:25:53

标签: backbone.js backbone-views

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

从骨干视图中的render方法我一直在尝试执行以下操作:

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

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

但是在这两种情况下,虽然找到了msg元素,但是当尝试在返回的元素上调用colorbox方法时,我得到一个异常,即没有定义该方法。

但是当我使用时:

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

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

2 个答案:

答案 0 :(得分:2)

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

我的意思是,你的代码在自然行为失败时是正常的。

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

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

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

第三方Backbone.js插件有一个“命名”onRender的方法,在渲染View后执行(并假设添加到DOM中)。但是,如果您不使用其他Backbone.js插件,请确保在将View添加到DOM之前调用colorbox。

答案 1 :(得分:0)

在黑暗中拍摄......

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

也许自从Backbone确实预编译this.$el = $(this.el)到你调用this.$el.colorbox()时发生了一些事情,所以这个函数不可用,它在实例this.$el中从未出现过。< / p>

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