插件AMD应用程序如何与主机非AMD应用程序通信

How a plugin AMD-application can communicate with a Host non-AMD application?

本文关键字:AMD 应用程序 通信 主机 插件      更新时间:2023-09-26

我有一个Host Javascript应用程序,它不使用AMD、BackboneJS或RequireJS,而是使用jQuery,我有一一个带有RequireJS+BackboneJS的小应用程序,应该是Host的插件。

现在插件AMD应用程序:

  1. 应该成为主机应用程序中的一些数据
  2. 应该从Host应用程序启动(进入jquery对话框)

我的问题是,我在插件AMD应用程序中没有任何全局变量(函数),所以我的大型非AMD应用程序不能这样看。

我如何设置这两者之间的通信,以便非AMD应用程序可以看到并将数据传递给插件AMD应用程序?

入口点我的插件AMD应用程序:

<script data-main="app/js/main" src="app/js/Libs/require/require.js"></script>

main.js

require.config({
  paths: {
    jquery: 'http://code.jquery.com/jquery-1.7.1.min',
    jqueryui: 'http://code.jquery.com/ui/1.8.17/jquery-ui',
    underscore: 'Libs/underscore/underscore-min',
    backbone: 'Libs/backbone/backbone-min',
    //Require Plugins
    text: 'Libs/require/text',
    use: 'Libs/require/use',
    domReady: 'Libs/require/domReady'
  },
  use: {
    backbone: {
      deps: ["use!underscore", "jquery"],
      attach: function() {
        return Backbone;
      }
    },    
    underscore: {
      attach: "_"
    }
  }
});

require([
    'jquery',
    'use!backbone',
    'app'
    ], function(App){
    });

app.js

define([
 'jquery',
 'router'
 ], function($, Router){
    var initialize = function(){
     // Pass in our Router module and call it's initialize function
     Router.initialize();
    }
    return {
      initialize: initialize
    };
 });

不确定我是否完全理解,但要从您的requirejs代码中公开一个全局:

require([
  'jquery',
  'use!backbone',
  'app'
], function(App){
  window.App = App;
});

现在window.App对所有代码都可见。