我正在使用Rails 4.1通过一个简单的Backbone JS应用程序,并且在将数据从控制器传送到Collection时遇到了一些麻烦。
我为应用程序设置了模型,视图,集合和路由器,但是当索引视图呈现时,我什么都没有返回。当我尝试在控制台中点击js app的初始化时,我收到以下错误:
TypeError: Cannot read property 'tasks' of undefined
这是指'data',它从rails控制器传递到initialize函数。
经过一些调试后,我看到我的控制器在尝试在js app上调用initialize
时收到以下错误:
NoMethodError: private method `initialize' called for TodoList:Module
我的设置如下:
控制器:
class TasksController < ApplicationController
respond_to :json, :html
def index
@tasks = Task.all
respond_with(@tasks)
end
end
Backbone App:
var TodoList = {
Models: {},
Collections: {},
Views: {},
Routers: {},
initialize: function(data) {
this.tasks = new TodoList.Collections.Tasks(data.tasks);
new TodoList.Routers.Tasks();
Backbone.history.start();
}
};
骨干路由器:
TodoList.Routers.Tasks = Backbone.Router.extend({
routes: {
'': 'index'
},
index: function() {
alert('I cannot get this text to render');
}
});
骨干模型:
var Task = Backbone.Model.extend({});
Backbone Collection:
TodoList.Collections.Tasks = Backbone.Collection.extend({
model: Task,
url: '/tasks'
});
更新
tasks / index.html / erb,其中TodoList.initialize从:
调用<%= content_for :javascript do %>
<%= javascript_tag do %>
TodoList.initialize({ tasks: <%== @tasks.to_json %> });
<% end %>
<% end %>
答案 0 :(得分:0)
经过一番挖掘,我意识到我错过了引用我的javascript的application.html.erb
布局文件中的以下行
<%= yield :javascript %>