除非使用路径,否则头部中定义的 Backbone.js 视图不工作

11dmarpk  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(154)

我在我的Rails 3.2项目中使用了“rails-backbone”gem。通过这种设计,我的Backbone视图被加载到<head>标签中。当使用Routes时,一切都很好,但是如果我试图直接使用视图而不使用Routes,视图就不会呈现。如果我把视图代码放在<body>中,一切都能按预期工作。
当在<head>中定义视图时,是否有方法使视图工作?
更新:在<body>中:

<script type="text/javascript">
    var lv = new ListView();
</script>

<head>中包含javascript文件中:

window.ListView = Backbone.View.extend({
    el: $("#node"), // This does not work
    initialize: function(){
        _.bindAll(this, 'render'); 
        this.el = $("#node"); // Works if I add this line
        this.render();
    },
    render: function(){
        $(this.el).append("<ul> <li>hello world</li> </ul>");
    }
});

据我所知,#node还不存在,这就是为什么它没有绑定到el的原因。我不太明白这里什么时候发生的:var lv = new ListView(),我以为我是从一个类创建一个示例(我猜我得到了一个对象的克隆?)。是否有其他方法可以通过修改<body>中的代码而不是包含的javascript来使代码工作?

ccrfmcuu

ccrfmcuu1#

您的问题是由于在视图中使用jQuery选择器作为el的值而引起的。
请阅读:
http://lostechies.com/derickbailey/2011/11/09/backbone-js-object-literals-views-events-jquery-and-el/

ijxebb2r

ijxebb2r2#

如果您想让某些东西在头中工作,但在DOM准备好之后,(显然因为您使用的是jQuery)只需通过以下方式在DOMReady事件中设置视图:

$(document).ready(function(){ 
   ...
   //set up view here
   ...
 });

相关问题