【发布时间】:2014-12-01 00:13:45
【问题描述】:
我正在使用 Rails 4.1 开发一个简单的 Backbone JS 应用程序,但在将数据从控制器传输到 Collection 时遇到了一些麻烦。
我已经为应用程序设置了模型、视图、集合和路由器,但是当索引视图呈现时,我没有得到任何返回。当我尝试在控制台中点击 js 应用程序的初始化时,我收到以下错误:
TypeError: Cannot read property 'tasks' of undefined
指的是“数据”,它是从 rails 控制器传递给初始化函数的。
经过一些调试,我看到我的控制器在尝试在 js 应用上调用 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
主干应用:
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({});
主干集合:
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 %>
【问题讨论】:
-
您在 JavaScript 中的哪里调用
TodoList.initialize?这里有些东西很困惑。TypeError是 JavaScript 错误,但NoMethodError是 Ruby 错误。您尝试在 Ruby 中调用TodoList.initialize,但您想在 JavaScript 中调用TodoList.initialize(some_javascript_data)。 -
我从我的 index.html.erb 文件中调用 TodoList.initialize... 我将在上面的更新中附上。我想这是一个 ruby 错误,因为我使用 pry 在 ruby 方面进行调试......也许这是一个红鲱鱼?
标签: javascript ruby backbone.js ruby-on-rails-4