Backbone.js - 仅将对象集合到某个项目的范围

时间:2013-06-24 10:30:21

标签: ruby-on-rails backbone.js coffeescript

我正在使用带有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",我会得到预期的{{1}}。这里发生了什么?为什么不在Collection?中定义projectId?

1 个答案:

答案 0 :(得分:0)

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

您有两种选择:

删除包含D3.projectId定义的文档就绪方法,并确保在页面 之前将设置为 使你的url属性成为这样的方法:

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