首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对require.js感到困惑

对require.js感到困惑
EN

Stack Overflow用户
提问于 2013-01-07 18:36:35
回答 2查看 125关注 0票数 0

我一直在研究require.js,但我对如何在我的小部件系统中使用它感到有点困惑。

我的窗口小部件系统基本上允许用户选择他/他想要查看哪些窗口小部件存储在数据库中。

因此,当用户在下一次访问时加载页面时,他/她将只看到所选的小部件。实际上,只加载所显示的窗口小部件所需的html、javascript,而不是加载所有窗口小部件的所有html和javascript,然后隐藏不需要的内容。

让我感到困惑的是如何使用require.js来实现这一点

我应该动态生成下面的require.js代码吗?如果用户已经保存了widget_1, widget_5 and widget_70,我假设我需要像这样动态生成javascript?

代码语言:javascript
复制
require(['widget_1','widget_5','widget_70'], function(w1, w5, w70){
    // then do something here?
});

所需行是基于sql查询动态生成的吗?

因此,如果他们只选择保存一个小部件以供下次查看,他们将只得到:

代码语言:javascript
复制
require(['widget_90'], function(w90){
    // then do something here?
});

这就是我应该做的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-07 20:14:52

始终定义模块经常依赖的库的路径,如下所示:

代码语言:javascript
复制
<script data-main="scripts/main" src="scripts/require.js"></script>

文件:scripts/main.js

代码语言:javascript
复制
require.config({
    paths: {
        jQuery_1_7_2: 'lib/jquery.1.7.2',
        underscore: 'lib/underscore',
        .....
        .....
    }
});

注意:您需要在模块中包含带有-的库,并以对象的形式返回,如下所示:

文件:lib/jquery.1.7.2.js

代码语言:javascript
复制
define([ 'lib/jquery/jquery.1.7.2.min' ], function() {

    return jQuery.noConflict(true);

});

对于其他不遵循模块化方法AMD规范的库,也可以采用相同的方法

注意:使用 可以避免上述定义库模块的步骤

因为您的页面是动态的,所以您永远不知道将加载哪些模块。

您可以调用多个require()调用来加载模块。因为requirejs异步加载脚本,所以下面的方法不会影响页面性能。

带有超文本标记语言视图-1\f25-1的-1\f25-1模块

代码语言:javascript
复制
<html>..
<div id="module_1">
    //contents of module 1
</div>
<script type="text/javascript">
    require(["scripts/widgets/module_1"], function( module_1 ){
        module_1.init();
    })
</script>
..</html>

文件:scripts/widgets/module_1.js

代码语言:javascript
复制
define(["jQuery_1_7_2","underscore"], function($, _){
    // Module functionality goes here
    return {
        init: function(){
            // Module initialiser
        }
    }
});

在超文本标记语言视图中具有-的模块2

代码语言:javascript
复制
<html>..
<div id="module_2">
    //contents of module 2
</div>
<script type="text/javascript">
    require(["scripts/widgets/module_2"], function( module_2 ){
        module_2.init();
    })
</script>
..</html>

文件:scripts/widgets/module_2.js

代码语言:javascript
复制
define(["jQuery_1_7_2","underscore"], function($, _){
    // Module functionality goes here
    return {
        init: function(){
            // Module initialiser
        }
    }
});

如果您不介意在DOM加载后初始化模块,您可以使用controljs并更改脚本标记的MIME类型。我相信这不会对页面性能造成太大的影响。

票数 2
EN

Stack Overflow用户

发布于 2013-01-07 18:48:41

我假设:

  • 您已在需要配置的某个位置定义了微件的路径
  • 您的微件已被沙箱保护(可以在没有微件的情况下运行应用程序可以在微件

的情况下运行

您可以在服务器上生成数组并将其填充到js中(例如,作为内联脚本),然后publish某种app.ready事件,如下所示:

代码语言:javascript
复制
<script>
require(/*array from the server*/, function(){
    // publish application ready event
});
</script>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14194149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档