1

我有一個帶有Backbone.js前端的Rails應用程序。在我的骨幹模型/集的定義,我有一個模型(project.js.coffee.erb)以下Rails在Backbone中引導模型時緩存資源中的舊數據

############################# 
## MODEL 
############################# 
class window.Project extends Backbone.Model 

    urlRoot: '/projects' 

############################# 
## COLLECTION 
############################# 
class window.Projects extends Backbone.Collection 

    model: Project 

    url: '/projects' 


# initialize new collection 
window.projects = new Projects 
projects.reset(<%= Project.all.to_json %>) 

最後一行就是ERB負載在JSON的所有項目。

當我加載我的應用程序時,此自舉會導致包含舊數據的集合。我知道這是舊的,因爲我已經儘量去爲:

  • 刪除我的開發數據庫(sqlite3的)
  • 改變我的database.yml,以重命名我的開發數據庫名稱
  • 重新運行rake db:migrate創建一個全新的.sqlite3數據庫文件

我可以運行sqlite3,並看到該項目表中不包含任何行,然而,即使重新啓動服務器後,project.js被編譯成包含集合全現在不存在數據。

Rails的正確靴子納入發展模式,當我運行rails s

=> Booting WEBrick 
=> Rails 3.2.5 application starting in development on http://0.0.0.0:3000 
=> Call with -d to detach 
=> Ctrl-C to shutdown server 
[2012-07-02 21:24:08] INFO WEBrick 1.3.1 
[2012-07-02 21:24:08] INFO ruby 1.9.3 (2012-04-20) [x86_64-darwin11.4.0] 
[2012-07-02 21:24:08] INFO WEBrick::HTTPServer#start: pid=11607 port=3000 

如果我創建項目,他們甚至保存到數據庫中。他們也被添加到Backbone集合中。但是,再次,如果我重新加載頁面或者甚至重新啓動服務器,集合將再次填充舊數據。

有人可以幫我弄清楚我在這裏做錯了嗎?

回答

1

好吧,事實證明我弄清楚發生了什麼事情。

只要文件本身沒有改變,rails中的資產就會被緩存。因此,一旦project.js.coffee.erb編譯爲project.js,引導到集合中的數據將保持不變,直到我對project.js.coffee.erb進行更改,此時,rails將重新編譯該文件,然後才從數據庫重新獲取數據。

我意識到,如果我想要在每個頁面加載時將新數據引導到集合中,我需要將projects.reset() javascript作爲主要app/views/layouts/application.html.haml中的內聯腳本添加。將此代碼添加到我的body標記的末尾就可以實現。

:javascript 
    projects.reset(#{Project.all.to_json}) 
    groups.reset(#{Group.all.to_json}) 
    users.reset(#{User.all.to_json}) 

現在,每次頁面重新加載時,當前數據都會加載到相應的集合中。