检查骨干是否已被取出或更改?

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

标签: javascript backbone.js

我需要在url中包含两个Backbone.Collection.extend()属性,因为如果集合是fetched,那么如果集合获得新模型,我需要使用特定的url那我想改变url

module.exports = MessagesCollection = Backbone.Collection.extend({
    initialize: function(models, options) {
        this.id = options.id;
    },
    url: function() {
        if (fetch method is called) {
            return '/api/messages/' + this.id;
        } else {
            // here if a model is being added?
            return '/api/messages'
        }
    },
    model:  MessageModel
});

原因是因为我只想根据用户从服务器下载模型。

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');
            } 
        }); 

    } 
});

当用户在应用程序中创建新模型时,我希望它进入主要集合吗?

这是否意味着我应该以某种方式创建一个基于主集合的子集合?

修改

我的创建在应用程序window.App.data.messages.create(Message);中的其他位置看起来像这样我想也许我可以写一些像

    var me = new MeModel();    
    me.fetch({
        success: function(response) { 
            App.data.me = me;
            var messages = new MessagesCollection([], { id: response.get('user_id') });
            var allMessages = new MessagesCollection();
            messages.fetch({
                success: function() {
                    App.data.messages = messages;
                    App.data.allMessages = allMessages;
                    App.core.vent.trigger('app:start');
                } 
            }); 

        } 
    });

然后创建window.App.data.allMessages.create(Message);>听起来它可能会给IDK带来任何问题吗?

修改:

以上工作但我必须创建一个新的Backbone.Collection.extend()传递相同的模型,但只是写它像

var Backbone = require('backbone'),
    MessageModel = require('../models/message');

module.exports = AllMessagesCollection = Backbone.Collection.extend({
    model:  MessageModel,
    url: '/api/messages'
});

所以让我真的打破这个问题,这个解决方案是否有问题。做这个的最好方式是什么?我能想到的最糟糕的事情就是带宽,使用这种方法我会经常发送请求!

1 个答案:

答案 0 :(得分:1)

如果您只在创建新模型时需要使用不同的网址,则可以覆盖collection.create方法:

var MessagesCollection = Backbone.Collection.extend({
    initialize: function(models, options) {
        this.id = options.id;
    },
    url: function() {
      return '/api/messages/' + this.id;
    },
    create: function(model, options){
      var extendedOptions = _.extend(options || {}, {url: '/api/messages'});
      return this.constructor.__super__.create.call(this, model, extendedOptions);
    }
});