Backbone.js 如何将木偶事件聚合器正确设置为Require.js模块
我正在尝试将vent/EventAggregator设置为一个单独的Require.js模块。我使用的是Marionette 1.0.2(我相信它的实现与1.0.0之前的旧版本不同),其中包含wreqr:此代码来自主干网。Marionette.js:-Backbone.js 如何将木偶事件聚合器正确设置为Require.js模块,backbone.js,requirejs,marionette,Backbone.js,Requirejs,Marionette,我正在尝试将vent/EventAggregator设置为一个单独的Require.js模块。我使用的是Marionette 1.0.2(我相信它的实现与1.0.0之前的旧版本不同),其中包含wreqr:此代码来自主干网。Marionette.js:- // Event Aggregator // ---------------- // A pub-sub object that can be used to decouple various parts // of an app
// 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, _);
当我设置我的vent.js模块时,它应该是什么?大概是这样的:-
define(['marionette'],function(Marionette){
return new Marionette.EventAggregator();
})
另外,在我的require配置中,我是否应该显式地包括backbone.wreqr.js?或者仅仅是木偶文件(参见上面的代码片段)就足够了吗
以下是我的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);
});
}
);
非常感谢大家的帮助
非常感谢
萨姆
\uuuuuuuuuuuuuuuuuuuu****更新
多亏了Paul,我才知道如何让我的vent.js正常工作。仅供参考,我不需要在配置中单独导入wreqr文件。下面是vent.js代码:-
define(['backbone', 'marionette'],function(Backbone, Marionette){
return new Backbone.Wreqr.EventAggregator();
});
-我想木偶锉就足够了。谢谢保罗·格里姆。遗憾的是,当我遵循教程,只导入木偶(其中包含Wreqr.EventAggregator)并将其用于通风模块时-
define(['marionete'],function(木偶){return new marionete.EventAggregator();})
我在返回行上得到以下错误-Uncaught TypeError:undefined不是函数。你知道会发生什么吗?非常感谢,Sam.console.log(木偶网,木偶网[“EventAggregator”])
在该模块中查看哪个是未定义的。然后检查EventAggregator
是否实际包含在木偶JS文件中。事实上,此源代码行-显示EventAggregator
作为Backbone.Wreqr.EventAggregator
访问。谢谢Paul。当我搜索控制台中的木偶对象时,Wreqr不在那里。正如您所说,它位于主干对象中,但当我尝试在控制台上登录它时,我无法访问Wreqr对象。我可以在对象浏览器中看到它,但是当我尝试使用console.log(Backbone.Wreqr)时,我没有定义它;或console.log(主干[“Wreqr”]);我的vent.js现在看起来是这样的:-定义(['backbone'],函数(backbone){console.log(backbone.Wreqr);})知道我为什么不能访问Wreqr对象吗?再次感谢,samonette.js文件的代码是否与上面的链接相同?它可能不是相同的版本/文件。即使这样,也可能是单独加载Wreqr文件破坏了这一点。如果您版本的木偶确实有Wreqr字段,请删除主干.Wreqr
垫片,否则它们可能会冲突。谢谢Paul,我非常感谢您的时间和努力。这对我来说是一个巨大的帮助,因为我在第一个木偶应用程序中遇到了麻烦!我有一个类似的问题,但我试图使用核心amd构建的木偶,并包括wreqr文件分别。尝试创建应用程序的新实例时出现“主干未定义”错误。
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);
});