多个Backbone.js集合选项?

时间:2014-04-01 22:38:17

标签: javascript backbone.js

说明:

在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我正在使用牵线木偶,也许这可以帮到什么?

1 个答案:

答案 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)