0

我正在使用带有rails后端的backbone.js。

我有一个对象集合:

class D3.Collections.ResourceInstances extends Backbone.Collection
  url: '/project/'+D3.projectId+'/resource_instances'

我正在尝试将 resource_instances 范围限定为用户的当前项目。在我的 Rails 视图中,我在 D3 上设置 projectId:

<%= javascript_tag do %>
  $(document).ready( function() {
    D3.projectId = <%= @project.id %>;
  });
<% end %>

当我resources = new D3.Collections.ResourceInstances()在浏览器控制台中调用时resources.url"/project/undefined/resource_instances". '/project/'+D3.projectId+'/resource_instances'但是,如果我在控制台中进行评估,我会得到预期的"/project/37/resource_instances". 这里发生了什么?为什么 Collection 中没有定义 projectId?

4

1 回答 1

0

在文档准备好之前不会设置 D3.projectId,这意味着将在定义 D3.projectId 之前加载和解释 JavaScript。

你有两个选择:

删除包装 D3.projectId 定义的文档就绪方法,并确保在您的 javascripts 包含在页面上之前设置它使您的 url 属性成为如下方法:

class D3.Collections.ResourceInstances extends Backbone.Collection
  url: -> '/project/'+D3.projectId+'/resource_instances'
于 2013-06-24T10:52:12.237 回答