Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在RequireJS中集中主干事件聚合器-这是如何工作的?_Javascript_Backbone.js_Requirejs_Eventaggregator - Fatal编程技术网

Javascript 在RequireJS中集中主干事件聚合器-这是如何工作的?

Javascript 在RequireJS中集中主干事件聚合器-这是如何工作的?,javascript,backbone.js,requirejs,eventaggregator,Javascript,Backbone.js,Requirejs,Eventaggregator,我正在使用RequireJS编写一个主干应用程序来定义模块。我遇到了一个由来已久的问题,即如何在不使用全局变量或将其作为参数传递到每个视图的情况下传递事件聚合器 vent = _.extend({}, Backbone.Events); 我已经使用了木偶,但由于我还没有使用木偶,我已经将它改为使用无聊的旧通风对象: vent.js: define(['underscore', 'backbone'], function (_, Backbone) { return _.extend({

我正在使用RequireJS编写一个主干应用程序来定义模块。我遇到了一个由来已久的问题,即如何在不使用全局变量或将其作为参数传递到每个视图的情况下传递事件聚合器

vent = _.extend({}, Backbone.Events);
我已经使用了木偶,但由于我还没有使用木偶,我已经将它改为使用无聊的旧
通风
对象:

vent.js

define(['underscore', 'backbone'], function (_, Backbone) {
    return _.extend({}, Backbone.Events);
});
define(['backbone', 'vent'], function (Backbone, vent) {

    var EnquiryListView = Backbone.View.extend({

        events: {
            'click .enquiry-list-item-manage': 'manageClick'
        },

        manageClick: function () {
            vent.trigger('navigate', 'enquiry/' + id);
        }
    });
});
define(['backbone', 'vent'], function (Backbone, vent) {

    var AppRouter = Backbone.Router.extend({
        routes: {
            'enquiry/:id': 'enquiryManage'
        },

        initialize: function () {
            //listen out for navigate events
            this.listenTo(vent, 'navigate', this.gotoRoute);
        },

        gotoRoute: function (route) {
            this.navigate(route, { trigger: true });
        }
    });
现在在我的各个模块中,我可以发布和订阅,如:

查询列表视图.js

define(['underscore', 'backbone'], function (_, Backbone) {
    return _.extend({}, Backbone.Events);
});
define(['backbone', 'vent'], function (Backbone, vent) {

    var EnquiryListView = Backbone.View.extend({

        events: {
            'click .enquiry-list-item-manage': 'manageClick'
        },

        manageClick: function () {
            vent.trigger('navigate', 'enquiry/' + id);
        }
    });
});
define(['backbone', 'vent'], function (Backbone, vent) {

    var AppRouter = Backbone.Router.extend({
        routes: {
            'enquiry/:id': 'enquiryManage'
        },

        initialize: function () {
            //listen out for navigate events
            this.listenTo(vent, 'navigate', this.gotoRoute);
        },

        gotoRoute: function (route) {
            this.navigate(route, { trigger: true });
        }
    });
app router.js

define(['underscore', 'backbone'], function (_, Backbone) {
    return _.extend({}, Backbone.Events);
});
define(['backbone', 'vent'], function (Backbone, vent) {

    var EnquiryListView = Backbone.View.extend({

        events: {
            'click .enquiry-list-item-manage': 'manageClick'
        },

        manageClick: function () {
            vent.trigger('navigate', 'enquiry/' + id);
        }
    });
});
define(['backbone', 'vent'], function (Backbone, vent) {

    var AppRouter = Backbone.Router.extend({
        routes: {
            'enquiry/:id': 'enquiryManage'
        },

        initialize: function () {
            //listen out for navigate events
            this.listenTo(vent, 'navigate', this.gotoRoute);
        },

        gotoRoute: function (route) {
            this.navigate(route, { trigger: true });
        }
    });
此模式似乎工作正常,路由器可以侦听
vent
对象,视图可以在其上触发事件

但是。。。路由器和视图如何查看同一对象?不
返回{.extend({},Backbone.Events)总是返回一个新对象吗


关于RequireJS是否有我不了解的东西,或者是
.extend
主干.Events
做了一些事情,或者是关于JavaScript是否有我不完全理解的东西?

在AMD中,define回调只执行一个。其结果用于所有相关模块。收银台。我认为你的问题与此相关。

太棒了,谢谢你澄清这一点。一百万个脱钩想法刚刚闪现在我眼前。RequiresJS是一件非常好的事情:)