簡體   English   中英

檢查主干是否已獲取或更改?

[英]Check if backbone has been fetched, or changed?

我需要在Backbone.Collection.extend()包含兩個url屬性,因為如果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);其他地方看起來像這樣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'
});

因此,讓我真正分解這個問題,這個解決方案是否有問題。 做這個的最好方式是什么? 我能想到的最糟糕的事情是帶寬,使用這種方法,我將不斷發送請求!

如果僅在創建新模型時需要使用其他url,則可以覆蓋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);
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM