环境:钛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
并对客户端进行排序/过滤 - 这将是一个有很多记录的噩梦。我在这里缺少什么?
答案 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"
},
});
},