Javascript 主干不与rails控制器通信?
我正在使用Rails 4.1开发一个简单的主干JS应用程序,在将数据从控制器传输到集合时遇到了一些问题 我已经为应用程序设置了模型、视图、集合和路由器,但是当索引视图呈现时,我没有得到任何返回。当我尝试在控制台中点击js应用程序的initialize时,出现以下错误:Javascript 主干不与rails控制器通信?,javascript,ruby,backbone.js,ruby-on-rails-4,Javascript,Ruby,Backbone.js,Ruby On Rails 4,我正在使用Rails 4.1开发一个简单的主干JS应用程序,在将数据从控制器传输到集合时遇到了一些问题 我已经为应用程序设置了模型、视图、集合和路由器,但是当索引视图呈现时,我没有得到任何返回。当我尝试在控制台中点击js应用程序的initialize时,出现以下错误: TypeError:无法读取未定义的属性“tasks” 它指的是“数据”,它从rails控制器传递到initialize函数中 经过一些调试后,我发现我的控制器在尝试调用js应用程序上的initialize时收到以下错误: NoM
TypeError:无法读取未定义的属性“tasks”
它指的是“数据”,它从rails控制器传递到initialize函数中
经过一些调试后,我发现我的控制器在尝试调用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
主干路由器:
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 %>
初始化({tasks:});
经过一番挖掘,我意识到我的application.html.erb
布局文件中缺少引用我的javascript的以下行
在JavaScript中在哪里调用TodoList.initialize
?这里有些东西很混乱。该TypeError
是一个JavaScript错误,但NoMethodError
是一个Ruby错误。您试图在Ruby中调用TodoList.initialize
,但您想在javascript中说TodoList.initialize(一些javascript数据)
。我从index.html.erb文件调用TodoList.initialize。。。我将在上面附加一个更新。我认为这是一个ruby错误,因为我使用pry在ruby端进行调试…也许这是一个危险的想法?
<%= content_for :javascript do %>
<%= javascript_tag do %>
TodoList.initialize({ tasks: <%== @tasks.to_json %> });
<% end %>
<% end %>