好的,我有一个简单的JQuery插件,当应用于div时,将使用预加载器图像整齐地加载该div中的所有图像。这很好。
然而,在Backbone中,我在页面加载后将数据从JSON附加到元素。因此,下面的代码将无效。
$(document).ready( ->
$("#theList").preloader()
)
所以我需要在生成列表之后将“$(”#theList“)。preloader()”放在我的渲染函数中..
class HomeView extends Backbone.View
constructor: ->
super
initialize: ->
@isLoading = false
events: {
"click #nextPage": "nextPage"
"click #prevPage": "prevPage"
}
template: _.template($('#home').html())
theListTemplate: _.template($('#theList').html())
render: ->
$(@el).append(@template)
@loadResults()
$("#theList").preloader() #<----------------- DOESN'T WORK NOW
loadResults: () ->
@isLoading = true
Properties.fetch({
success: (data) =>
#Append properties to list
$('#theList').append(@theListTemplate({data: data.models, _:_})).listview('refresh')
error: ->
@isLoading = false
alert('Unable to load information')
})
但是,现在代码行在Backbone View / Model / Controller或其他内容中,它不起作用..
作为参考我加载我的应用程序就像这样..
$(document).ready( ->
console.log('document ready')
app.AppRouter = new AppRouter()
Backbone.history.start()
)
任何帮助将不胜感激!感谢。
答案 0 :(得分:2)
假设预加载器不打算在loadResults#fetch#success
中添加的节点上运行(因为在调用预加载器时没有返回提取),我怀疑问题是,在执行期间render()
函数,视图el
尚未成为DOM的一部分。
如果您调用HomeView
myHomeView = new HomeView()
$('some selector').append(myHomeView.render().el)
HomeView的el还没有被添加到DOM中,它在一个独立的文档中。
因此,jQuery选择器$("#theList")
返回一个空结果 - 因为它搜索DOM。这可以通过console.log'n选择结果,或者使用调试器设置断点,并使用控制台进行测试来轻松验证。
谢天谢地,修复很简单。您需要通过使用jQuery reference scoped to the view将选择器作用于视图来引用分离的文档:
@$("#theList").preloader()
或者,自己动手
$(@el).find("#theList").preloader()