钛合金中模型和集合的不同URL

时间:2013-09-20 23:55:54

标签: titanium-alloy

环境:钛3.1.3,合金1.2.2。

我正在使用以下适配器来保持模型/集合的持久性:https://github.com/viezel/napp.alloy.adapter.restapi

我有一个API,其集合的URL结构与单个模型不同。请考虑以下事项:

获取单个记录:[GET] /files/:id

获取用户的所有文件:[GET] /users/:id/files

我有files.js的以下架构:

exports.definition = {  
    config: {
        "URL": "https://my.api.here/files",
        //"debug": 1, 
        "adapter": {
            "type": "restapi",
            "collection_name": "files",
            "idAttribute": "id"
        }
    },      
    extendModel: function(Model) {      
        _.extend(Model.prototype, {});
       return Model;
    },  
    extendCollection: function(Collection) {        
        _.extend(Collection.prototype, {
            initialize: function(){
                this.url = "http://my.api.here/users/"+this.user_id+"/files";
            }
        });
        return Collection;
    }       
}

我在上面尝试做的是覆盖集合初始化方法以更改集合的URL结构。然后我就这样称呼它:

var currentUserFiles = Alloy.createCollection("files", {user_id:"12345"});
    currentUserFiles.fetch({
        success: function(files){
            console.log("Woo! Got the user's files!");
            console.log(JSON.stringify(files.models));
        },
        error: function(){
            console.log("Nope");
        }
    });

这不起作用。 fetch()方法只是继续尝试调用/files。我已经尝试在创建后将url设置为集合上的属性,这也不起作用。 理想情况下,我想为本地实例以及集合的单例版本执行此操作。

所以 - 问题是:我可以为集合使用不同的URL而不是模型吗?显然,我不想只调用/files并对客户端进行排序/过滤 - 这将是一个有很多记录的噩梦。我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

现在有点晚了但对于遇到这个问题的其他人来说。我的问题是在哪里/如何为模型和集合指定url。模型需要传递给它的特定id(例如:主键),因为模型只能是一个对象。如果您需要多个对象,请使用该集合。希望这会有所帮助:)

extendModel : function(Model) {
    _.extend(Model.prototype, {
        url : function() {
            return "http://my.api.here/users/"+this.user_id+"/files/"+ FILE_ID
        },
    });
    return Model;
},
extendCollection : function(Collection) {
    _.extend(Collection.prototype, {
        url : function() {
            return "http://my.api.here/users/"+this.user_id+"/files"
        },
    });
},