0

环境:钛 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和排序/过滤客户端 - 这将是一个有很多记录的噩梦。我在这里想念什么?

4

1 回答 1

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"
        },
    });
},
于 2013-12-30T05:08:42.333 回答