我开发了一个应用程序,Backbone
为了避免在 index.html 中声明多个 js 文件,我曾经RequireJS
加载 js 文件。一切正常。我的应用程序看起来像这样。
索引.html
<body>
<div id="#plugin-container"></div>
<script data-main="my-plugin" src="assets/js/require.js"></script>
</body>
我的插件.js
define([
'src/app'
], function(app){
app.init();
});
应用程序.js
define([
'jquery',
'underscore',
'backbone',
'src/models/main'
], function($, _, Backbone, Main){
var init = function () {....}
});
Everyting 工作正常,但现在我想让它成为一个插件,您可以在所有 html 项目中使用它(如jQuery
插件)。而且我不知道如何继续......最好的最终用途可能看起来像:
新项目.html
<div id="#plugin-container"></div>
<!-- Just load plugin. Do nothing. -->
<script data-main="my-plugin" src="assets/js/require.js"></script>
<script>
// Just an example that I would do but is sure not working....
myPlugin.init({
param1: true,
param2: '/url',
onSubmitSomething : myMethod
})
</script>
</body>
我的插件.js
define([
'src/app'
], function(app){
var myPlugin = app;
return myPlugin;
});
我的问题:如何在 requirejs 加载(myPlugin
)后获取我的应用程序实例并在 html 文件中启动他的方法(如上面的代码)?也许这不是一个好方法......谢谢。
更新
我已经尝试了一些东西。像这样将我的主应用程序模型添加my-plugin.js
到窗口对象:
// Loading main application file
define([
'src/app'
], function(app){
global = window;
global.myPlugin = app;
});
当我尝试myPlugin.init()
在我的 html 文件myPlugin
中启动时,无法再次访问:
<script data-main="mvo-thumbnail-plugin" src="assets/js/require.js"></script>
<script>
// Not working...
myPlugin.init({
"wrapper" : $("#thumbnailsManager"),
"url_images" : "assets/",
})
</script>
但是当我使用一个 setTimeout 来等待 requireJS 初始化时,它工作正常:
<script data-main="mvo-thumbnail-plugin" src="assets/js/require.js"></script>
<script>
// If I wait 500ms requireJS has done and my window.myPlugin
// object is available
setTimeout(function(){
myPlugin.init({
"wrapper" : $("#thumbnailsManager"),
"url_images" : "assets/"
})
},500)
</script>
这对我来说不是一个真正的解决方案。但我也许有一种新的反思方式……