我正在使用带有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?
答案 0 :(得分:0)
在文档准备好之前,不会设置D3.projectId,这意味着在定义D3.projectId之前将加载和解释JavaScript。
您有两种选择:
删除包含D3.projectId定义的文档就绪方法,并确保在页面或 之前将设置为 使你的url属性成为这样的方法:
class D3.Collections.ResourceInstances extends Backbone.Collection
url: -> '/project/'+D3.projectId+'/resource_instances'