Backbone.js为什么集合中的模型没有设置url?

时间:2011-07-19 04:12:41

标签: ruby-on-rails backbone.js

我对Backbone还是比较新的。我刚刚开始了解它是如何工作的。我已经使用Rails了一段时间,这是在使用Backbone时给我一些暗示的东西。所以这里:

很简单,我在Rails中有一个公司模型说我在javascript控制台中做了

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

最后一行,“company.url”没有回复我的期望,我期望的是'/ companies / 12345',所以当我更新公司并决定保存它时,它会知道在哪里“把“放到。

这是否意味着每次我想要保存的东西,我都要保存整个系列?(!)

3 个答案:

答案 0 :(得分:2)

我会看一下company.url()正在返回的内容。不需要保存整个集合。

答案 1 :(得分: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"
    }, ...
]}

如果我的回答有误,请纠正我。

答案 2 :(得分:0)

我实际上在尝试创建新公司集合的过程中犯了一个错误。 而不是

var Companies = new 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'