/ / Como faço para configurar corretamente um Marionette EventAggregator como um módulo Require.js - backbone.js, requirejs, marionette

Como configuro corretamente um Marionette EventAggregator como um módulo Require.js - backbone.js, requirejs, marionette

Eu estou tentando configurar um vent / EventAggregator como ummódulo Require.js separado. Estou usando o Marionette 1.0.2 (que acredito ter uma implementação diferente das versões legacy anteriores a 1.0.0) com o wreqr incluído: esse código é de backbone.marionette.js: -

        // Event Aggregator
// ----------------
// A pub-sub object that can be used to decouple various parts
// of an application through event-driven architecture.

Wreqr.EventAggregator = (function(Backbone, _){
"use strict";
var EA = function(){};

// Copy the `extend` function used by Backbone"s classes
EA.extend = Backbone.Model.extend;

// Copy the basic Backbone.Events on to the event aggregator
_.extend(EA.prototype, Backbone.Events);

return EA;
})(Backbone, _);

Quando eu configuro meu módulo vent.js, o que deveria ser? Algo assim:-

define(["marionette"],function(Marionette){
return new Marionette.EventAggregator();
})

Também no meu require config devo explicitamente incluir o backbone.wreqr.js ou não? Ou deveria apenas o arquivo de marionete (ver trecho de cima) ser suficiente?

Para referência, aqui está meu app.js: -

require.config({

paths : {
backbone : "lib/backbone",
underscore : "lib/underscore",
jquery : "lib/jquery",
marionette : "lib/backbone.marionette",
"backbone.wreqr" : "lib/backbone.wreqr",
text : "lib/text",
templates : "../templates"

},
shim : {
jquery : {
exports : "jQuery"
},
underscore : {
exports : "_"
},
backbone : {
deps : ["jquery", "underscore"],
exports : "Backbone"
},
marionette : {
deps : ["jquery", "underscore", "backbone"],
exports : "Marionette"
},
"backbone.wreqr" : {
deps : ["backbone", "marionette", "underscore"],
exports : "Wreqr"
}
}
})

require(
["jquery",
"underscore",
"backbone",
"marionette",
"backbone.wreqr",
"shell/shellapp"
],
function($, _, Backbone, Marionette, Wreqr, ShellApp) {
$(function() {
//new ShellApp();
var shell = ShellApp;
shell.start();
trace("shell: "+shell);
});
}
);

Tudo ajuda muito apreciada!

Muito obrigado,

Sam

_______</ strong>**** ATUALIZAÇÃO

Graças a Paul, descobri como fazer meu vent.js funcionar. FYI Eu não precisei importar o arquivo wreqr separadamente na configuração. Aqui está o código de vent.js: -

define(["backbone", "marionette"],function(Backbone, Marionette){
return new Backbone.Wreqr.EventAggregator();
});

Respostas:

6 para resposta № 1

Isso funciona para mim.

require.config({
paths: {
backbone: "http://backbonejs.org/backbone",
underscore: "http://underscorejs.org/underscore",
jquery: "http://code.jquery.com/jquery-1.9.1",
marionette: "http://marionettejs.com/downloads/backbone.marionette"
},
shim: {
jquery: {
exports: "jQuery"
},
underscore: {
exports: "_"
},
backbone: {
deps: ["jquery", "underscore"],
exports: "Backbone"
},
marionette: {
deps: ["jquery", "underscore", "backbone"],
exports: "Marionette"
}
}
});

require(["backbone", "marionette"], function (Backbone, Marionette) {
console.log(Backbone.Wreqr.EventAggregator);
var ea = new Backbone.Wreqr.EventAggregator();
console.log(ea);
});