除非使用路由,否则在Head中定义的骨干视图不起作用

时间:2012-02-16 15:54:55

标签: ruby-on-rails backbone.js

我在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(),我以为我是从一个类创建一个实例(我想我正在获得一个Object的克隆?)。是否有其他方法通过修改<body>中的代码而不是包含的javascript来使代码工作?

2 个答案:

答案 0 :(得分:0)

如果你想在头脑中工作,但是在DOM准备就绪之后(显然,因为你正在使用jQuery)只需通过以下方式在DOMReady事件中设置你的视图:

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

答案 1 :(得分:0)

您的问题是由于在视图中使用jQuery选择器作为el的值而导致的。

阅读本文:

http://lostechies.com/derickbailey/2011/11/09/backbone-js-object-literals-views-events-jquery-and-el/