基础的RequireJS帮助 - 我如何调用/定义一个函数?同时使用onclick和jquery

13

救命啊!

我非常困惑啊... 我不知道自己在干什么。

我昨天和今天一整天都在看RequireJS和AMD的教程和示例,到了这个地步,可是我觉得我还是对module(模块)有基本的误解。

  • 我有一堆从HTML元素中被“onClick”调用的函数...
    1. 我该如何使用RequireJS定义我的函数以便我能调用它们?太困惑了 :/ 而且我不懂
    2. 如何让我的onLoad函数被调用(在我的情况下,它是$(function(),但我该如何在RequireJS中启动它?)

我正在使用Node v0.10.12

<html>
...
<head>
<script data-main="" src="libraries/require.js"></script>
...
<script>
...
     //I really need all these javascript files for every function defined on this page...
     require(['simulatorConfiguration.js', 
              'modelConfiguration.js', 
              'libraries/jquery-1.10.2.min.js', 
              'libraries/jquery.lightbox_me.js', 
              'libraries/jquery-migrate-1.2.1.js', 
              'libraries/raphael-min.js'], function(start) { 

            $(function() {

                loadPage();  //<--- CALL LOAD PAGE, but it can't find the function
                //do some jquery stuff
            });

        });

    //function that get's called on body onload!
    define('loadPage', function loadPage()
    {
        hideAllDivs();
        //more jquery stuff...

        createModelMenu();
        //more jquery stuff...
    });

    define('hideAllDivs', function hideAllDivs()
    {
        //some UI stuff...

    });

    define('createModelMenu', function createModelMenu()
    {
        //some jquery stuff...
    });

    define('createTestMenu', function createTestMenu(model_key)
        {
        var javascriptLoc = "models/" + models[model_key].modelDir + "/testConfiguration.js";
        require([javascriptLoc], function(util) {

            showModelInformation(model_key);
            //some Jquery stuff...
        });
        });

    define('showModelInformation', function showModelInformation(model_key)
    {
        hideAllDivs();
        //some jquery stuff
    });

    define('showTest', function showTest(test_key)
    {       
        hideAllDivs();
        //some RaphaelJS stuff...
    });


    define('takeControl', function takeControl()
    {
        //some UI stuff
    });

    define('giveUpControl', function giveUpControl()
    {
        //some UI stuff...

    });
</script>
</head>
<body>
...
<li><a href="#" id="AoD" onclick="showTests(this.id)">Audio On Demand</a></li>
...
<input type="submit" value="Yes, Release Control" onclick="giveUpControl()">
....
<input type="submit" value="Take Control" onclick="takeControl()">
....
</body>

我需要做像这样的事情吗:

//function that get's called on body onload!
define('loadPage', function loadPage()
{
    return function(loadPage)
        {
            hideAllDivs();
            //more jquery stuff...

            createModelMenu();
            //more jquery stuff...
        }
});
//and call it with loadPage.loadPage(); ?

或许可以类似于以下内容:
//function that get's called on body onload!
define('loadPage', function loadPage()
{
    return function()
        {
            hideAllDivs();
            //more jquery stuff...

            createModelMenu();
            //more jquery stuff...
        }
});

或者

function(loadPage)?

我看了这些类似的问题:

这些也很有帮助,但还不够:

我尝试将函数分离到另一个文件中,因此我有"index.html"和"Logic.js"...这是要点:

=========================================

解决方案

https://gist.github.com/anonymous/6470443

1个回答

5
您需要创建和加载模块的最小代码大致如下:
// (a) Create two modules, 'hideAllDivs' and 'loadPage'.
define ('hideAllDivs', [], function () {
    return function() {
    };
});

define('loadPage', ['hideAllDivs'], function(hideAllDivs)
{
    return function()
        {
            hideAllDivs();
            //more jquery stuff...

            createModelMenu();
            //more jquery stuff...
        };
});

// (b) Load the loadPage module and call it.
require(['jquery-blah-blah', 'loadPage', 'anotherModule'], function($, loadPage, anotherModule) {
    $(function() {
        loadPage();
    });
});

强烈推荐阅读:http://requirejs.org/docs/api.html#define

哦,谢谢!我在哪里放置额外的函数,比如“hideAllDivs()”?我创建另一个“define”,然后使用hideAllDivs();调用它,这样可以吗? - Katie
尝试调用“loadPage()”时出现“undefined is not a function”的错误 https://gist.github.com/anonymous/6453705 我还尝试了使用createLoadPage(hideAllDivs)代替createLoadPage(),并尝试调用createLoadPage()而不是loadPage()..有什么想法? - Katie
1
是的。在调用 require()/define() 时,第一个数组和函数需要对齐。请参考更新后的示例。我删除了一些可选项,只保留了最少必需的内容。如果您发现使用此方法不能正常工作,可能是因为您的 jQuery 版本不兼容,请将函数的第一个参数从 $ 改为 __dontuse 或其他名称。 - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接