说明:
在node.js中构建并在后端表达,我正在向包含用户会话信息的res.json(details)
路由发送localhost:3000/me
。
因此,在客户端,我可以使用该特定用户,例如在客户端初始化时,我会编写一些这样的代码。
var me = new MeModel();
me.fetch({
success: function(response) {
App.data.me = me;
var messages = new MessagesCollection([], { id: response.get('user_id') });
messages.fetch({
success: function() {
App.data.messages = messages;
App.core.vent.trigger('app:start');
}
});
}
});
您看到我抓取me
模型并使用它来过滤MessagesCollection
中的消息。
问题:
在我的MessagesCollection
我传递了这样的选项。
module.exports = MessagesCollection = Backbone.Collection.extend({
initialize: function(models, options) {
this.id = options.id;
},
url: function() {
return '/api/messages/' + this.id;
},
model: MessageModel,
//url: '/api/messages'
});
这对于在使用var messages = new MessagesCollection([], { id: response.get('user_id') });
我的问题是当我运行window.App.data.messages.create(Message);
的其他地方时,当我想要发布到常规集合时,这想要发送到/api/messages/:id
吗?
理论:
所以很明显我会说最好的方法是重新思考如何在fetch方法中过滤模型。
所以基本上为了简化这个问题,我需要在.fetch()
GET 上过滤集合...并在.create()
POST 上设置过滤器
BTW我正在使用牵线木偶,也许这可以帮到什么?
答案 0 :(得分:0)
model.url()返回模型资源的相对URL 将位于服务器上。如果你的模型位于某个地方 否则,使用正确的逻辑覆盖此方法。生成的URL 形式:" [collection.url] / [id]"默认情况下,您可以覆盖 如果模型的集合不应该指定明确的urlRoot 考虑到了。
委托Collection#url生成URL,所以请确保你 如果这个类的所有模型都定义了它,或者是urlRoot属性 共享一个公共根URL。 id为101的模型,存储在 Backbone.Collection的网址为" / documents / 7 / notes&#34 ;,会有 此网址:" / documents / 7 / notes / 101"
http://backbonejs.org/#Model-url
所以你可以在MeModel上定义方法url并在那里生成url(如果没有其他用户 - 你可以只返回字符串" / me"或者根据模型属性生成)(例如切换模型有id)