2013-06-24 32 views
0

我正在使用backbone.js與rails後端。Backbone.js - 將對象的範圍集合僅限於某個項目

我有對象的集合:

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

我試圖範圍resource_instances用戶的當前項目。在我的Rails查看我的D3設置專案編號:

<%= 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?

回答

0

D3.projectId在文檔準備就緒之前未設置,這意味着在定義D3.projectId之前JavaScript將被加載和解釋。

你有兩個選擇:

取出文件準備方法包裹D3.projectId定義,並確保它被設置以前你的JavaScript都包含在頁面上讓您的網址屬性方法如下:

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

如果我使用方法(第二)方法,Backbone仍然會正確處理它? – dchapman

+0

是骨幹使用下劃線的結果方法,檢查url是一個屬性還是一個方法,並獲取結果。 –

+0

太棒了。謝謝! – dchapman