Backbone没有与rails控制器通信?

时间:2014-12-01 00:13:45

标签: javascript ruby backbone.js ruby-on-rails-4

我正在使用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 %>

1 个答案:

答案 0 :(得分:0)

经过一番挖掘,我意识到我错过了引用我的javascript的application.html.erb布局文件中的以下行

<%= yield :javascript %>