2011-07-19 76 views
1

我對Backbone還比較陌生。我剛剛開始瞭解它是如何工作的。我一直在使用Rails一段時間,這是什麼在使用Backbone的時候給了我一些提示。所以這裏有雲:Backbone.js爲什麼集合中的模型沒有設置url?

簡單,我有一個公司的模式在Rails中說,我做的JavaScript控制檯

companies = new Backbone.Collection(); 
companies.url = '/companies'; 
companies.url;  // '/companies' 
companies.fetch(); 
company = companies.at(0); 
company.url 

最後一行,「company.url」好好嘗試一下回到我的期望,我期望是類似'/ companies/12345'的東西,這樣當我更新公司並決定保存它時,它會知道去哪裏「放」。

這是否意味着,每次我想要的東西保存的,我一定要節省整個集合?(!)

回答

0

我在嘗試創建新公司集合的步驟中實際犯了一個錯誤。 所以不是

VAR公司=新Backbone.Collection()

我真的應該做這樣的事情:

var Companies = Backbone.Collection.extend({ 
    model: Company, 
    url : '/companies' 
}); 

var Company = Backbone.Model.extend(); 

var companies_collection = new Companies() 

companies_collection.fetch() 
companies_collection.models[0].url() // '/projects/123' 
2

我想看看什麼company.url()正在恢復。保存整個收集不應該是必要的。

+0

正確的..他應該看company.url()不是公司.url作爲模型上的url是一個函數而不是屬性。 –

+0

哦,是的,我告訴自己把它放下,但忘了:company.url()返回'/ companies':( –

+0

)如果你在看模型的url()時得到'/ companies',那麼你沒有'id'屬性在你用來填充公司的數據中。' –

0

我正在嘗試你的問題,發現模型沒有得到一個id。所以模型上的url方法不起作用。所以我覺得你需要把你的收藏像下面(我試過)

 cltn = Backbone.Collection.extend({    
      model:modelName, 
      parse:function(res){ 
       var i = 0; 
       var itms = _.map(res.items, function(o){       
        o.id = ++i; 
        return o 
       })     
       return itms; 
      } 
     }); 
     cltnInst = new cltn(); 
     cltnInst.url="/combodata.json?"; 
     cltnInst.fetch(); 

然後在你的螢火鍵入下面的代碼。

cltnInst.url; // this is a string props. output will be "/combodata.json?" 
cltnInst.at(0).url() // this is a method props output will be "/combodata.json?/1" 

combodata.json將這種格式

{ 
"identifier": "title", 
"items": [ 
    { 
     "title": "A", 
     "tag": "htmlcss", 
     "date": "today" 
    }, ... 
]} 

請糾正我,如果我的答案是錯的。

+0

嘿Rajkamal,抱歉花了這麼長時間來回復,我想我實際上發現了這個問題。 –

相關問題