Ruby on rails 3 backbone.js newcomer-在应用程序命名空间初始化方法中创建集合时出错

Ruby on rails 3 backbone.js newcomer-在应用程序命名空间初始化方法中创建集合时出错,ruby-on-rails-3,backbone.js,Ruby On Rails 3,Backbone.js,我在阅读《Rails上的Backbone.js》一书的同时创建了基本的todo应用程序,但在尝试初始化应用程序名称空间内的集合时,我遇到了以下javascript错误: 错误:TodoApp.Collections.Notes不是构造函数 源文件:localhost:3000/assets/todo_app.js?body=1 第13行 todo_app.js var TodoApp = { Models: {}, Collections: {}, Views: {}, Rout

我在阅读《Rails上的Backbone.js》一书的同时创建了基本的todo应用程序,但在尝试初始化应用程序名称空间内的集合时,我遇到了以下javascript错误:

错误:TodoApp.Collections.Notes不是构造函数 源文件:localhost:3000/assets/todo_app.js?body=1 第13行

todo_app.js

var TodoApp = {
  Models: {},
  Collections: {},
  Views: {},
  Routers: {},
  initialize: function(data) {
    console.log("INITIALIZE");
    var notes = new TodoApp.Collections.Notes(data.notes); 
    new TodoApp.Routers.Notes({ notes: notes }); 
    Backbone.history.start();    
  }
};
到目前为止,我已经按照说明创建了一个Note模型、Notes collection和router,这就是在index.html.erb上调用initialize方法的方式:

<%= javascript_tag do %>
  TodoApp.initialize({ notes: <%== @notes.to_json %> });
<% end %>
有人能帮忙吗?我错过了什么?
谢谢你的TodoApp.initialize({notes:})似乎是个打字错误。它应该是
TodoApp.initialize({notes:})相反。

Javascript是按照加载顺序计算的,因此我猜您的应用程序正在尝试在加载包含集合的文件之前进行初始化(您在加载其他文件之前包括todo_应用程序)

包括todo_app last或侦听document onload事件,并在页面完全加载后初始化应用程序。

尝试使用:

TodoApp.initialize({ notes: <%= @notes.to_json.html_safe -%> });
TodoApp.initialize({notes:});

您可以尝试实例化新集合,然后使用
重置
方法填充它

在您的示例中,应该是这样的:

initialize: function(data){
  var notes = new TodoApp.Collections.Notes()
  notes.reset(data.notes) 
<%= content_tag "div", "Can be blank", id: "container-id", data: { notes: Notes.all } %>
}

“reset”方法接受模型列表或散列。有关更多信息,请参阅

使用此方法的另一个好方法是在网页上预加载信息,然后让我们的收藏用存储的数据填充自己。可以使用如下数据标记在div上插入:

initialize: function(data){
  var notes = new TodoApp.Collections.Notes()
  notes.reset(data.notes) 
<%= content_tag "div", "Can be blank", id: "container-id", data: { notes: Notes.all } %>
你可以查一下是否想获得更多信息。注意,要观看这些视频,你必须订阅他的网站


注:如果yout todo_app.js的位置在您的javascript资产文件夹中,您不必使用资产管道添加它,因为rails将通过
/=require_树自动获取它。
行。

感谢您的回复。出于我还不明白的原因,如果我使用一个=比如你建议json使用“而不是实际的quotes@user1168320:这是因为它是HTML编码的,您希望在混合中添加
原始
.HTML\u safe
。嗨,伊瓦尼,谢谢您的回复。如果我尝试最后加载todo_应用程序,奇怪的是我会得到完全相同的错误