【问题标题】:Backbone not communicating with rails controller?骨干网不与 Rails 控制器通信?
【发布时间】: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


【解决方案1】:

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

&lt;%= yield :javascript %&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多