Reading up on tutorials of Backbone, it seems that when the add event is fired from a collection, the item added is sent along with the event (same goes for remove). I can't find any documentation on this feature on the backbonejs.org site and was curious if there was a way I could send an object along with my custom events. Secondly, is something like this possible in Marionette?

有帮助吗?

解决方案

Each object defined by Backbone mixes in Backbone.Events which means you can trigger events with object.trigger. It is defined as

trigger object.trigger(event, [*args])
Trigger callbacks for the given event, or space-delimited list of events. Subsequent arguments to trigger will be passed along to the event callbacks.

You just have to pass additional arguments to get them in your callbacks.

For example,

var m = new Backbone.Model();
m.on('custom', function(more) {
     console.log(more);
});
m.trigger('custom', 'more info');

will log more info

See http://jsfiddle.net/nikoshr/HpwXe/ for a demo

You would trigger an event with a reference to the object to emulate the behavior of backbone :

var m = new Backbone.Model();
m.on('custom', function(model, more) {
     console.log(arguments);
});
m.trigger('custom', m, 'more info');

http://jsfiddle.net/nikoshr/HpwXe/1/

And in a derived model:

var M = Backbone.Model.extend({
    custom: function() {
        this.trigger('custom', this);
    }
});

var m = new M();
m.on('custom', function(model, more) {
     console.log(model);
});
m.custom();

http://jsfiddle.net/nikoshr/HpwXe/2/

其他提示

Yes of course, you can use Backbone.Event

var collection = Backbone.Collection.extend();
collection = new collection();
collection.on("message", function(message){
  console.log(message);
});

var model = new Backbone.Model();
collection.add(model);
model.trigger("message", "This is message");

About what types of events you can see to backbone documentation.

This is demo

Also you can use Event Aggregator from Marionette.js

An event aggregator implementation. It extends from Backbone.Events to provide the core event handling code in an object that can itself be extended and instantiated as needed.

var vent = new Backbone.Wreqr.EventAggregator();

vent.on("foo", function(){
  console.log("foo event");
});

vent.trigger("foo");
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top