1

我将 dom 元素列表定义为 Backbone 视图对象的属性,如下所示:

el : $("body"),
elTicket : $('#ticket'),
...

但是,这些 jquery 对象指向的 dom 尚未生成。

当这个问题出现时,我曾经做的是将 jquery 对象包装在一个函数中并像这样返回它:

el : function(){
    return $('body');
},
...

然后导致这样一条丑陋的线:

this.el().append('dasd');

有没有更好的解决方案?

4

2 回答 2

6

文档示例中所示,您应该使用选择器(而不是 jQuery 对象)作为Backbone.View属性值:

App.MyView = Backbone.View.extend({
    el: 'body',
    elTicket: '#ticket',
    ...
});
于 2012-10-04T16:20:23.137 回答
1

在不了解上下文的情况下很难给出全面的答案,但我鼓励您从另一个角度看待这个问题。

对于 body 标签,在 body 被加载到 DOM 之后运行你的代码。您可以通过将脚本标记放在 HTML 文件的末尾来执行此操作,或者使用其中一个 ifDocumentLoaded 函数并在其中调用您的主干代码。

如果主文档已经加载,并且您刚刚选择 body 作为您的问题的示例 - 假设标签是 div。您可以在尚未加载到 DOM 的元素上调用 JQuery。发生的情况是 JQuery 创建了这个元素,但它没有附加到 DOM。您可以稍后在机会合适时附加它 - 可能使用 $(body).append(this.el) 之类的查询方法。

请注意,默认情况下,el 属性是一个普通的旧 DOM 元素,预计将对应于特定视图。所以你可以拥有:

App.MyView = Backbone.View.extend({
    tagName: 'table', 
    ...   
});

您可以自动访问 App.MyView.el。它将是一个未附加的 DOM 元素,其标签名称为 table。现在,如果你想对这个 DOM 元素应用一些 Jquery 魔法,你可以通过 App.MyView.$el 访问它

于 2012-10-04T16:42:57.293 回答