![](/img/trans.png)
[英]Can an event be triggered in Backbone once a collection has been fetched and rendered?
[英]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.