【问题标题】:RequireJS some (not all) functions are undefinedRequireJS 一些(不是全部)函数是未定义的
【发布时间】:2013-06-15 01:30:10
【问题描述】:

我不确定那里的任何人都可以提供帮助,但这里可以。我目前正在重构我正在使用CraftyJS(一个出色的基于组件的游戏引擎)编写的游戏以使用 RequireJS。一切都很顺利,但突然间我遇到了障碍。我已经构建了一个模块,在其中我定义了一个小的 Crafty 组件,它基本上只是事件监听的瓶颈。在其中一个回调中,我调用了本地模块中定义的几个函数。我在许多情况下都在 RequireJS 中使用过这种模式,而且它总是对我有用。出于某种原因,在这种情况下,一些函数是未定义的。不是所有的人。一些。这是一些代码:

组件:

Crafty.c("TurnStateMachineObserver", {
    startListening: function() {
...
        this.bind(POST+PHASE_CHANGE, function(e) {
            // this is called after the phase change has already been 
            // applied. now, switch to the next phase, if appropriate.

            var curPhase = currentPhase();
            var nextPhase = nextPhase();

            if (nextPhase === PHASE_TURN_START)
                _triggerPlayerChange(nextPlayer());
            else if (curPhase !== PHASE_MAIN)
                _triggerPhaseChange(nextPhase());
        })
        .bind(POST+RESET, function(e) {
            reset();
        });
    },
...
});

对于那些不熟悉 Crafty 的人,Crafty.c 创建了一个以后可以实例化的组件。作为第二个参数传递的对象字面量将附加(扩展?)到任何包含TurnStateMachineObserver 作为其组件之一的对象(即使用Crafty.e("TurnStateMachineObserver"))。

组件内部使用的函数稍后在同一个文件中定义(整个文件包含在define() 调用中):

//  Function: currentPhase
//      The current <Turn Phase>.
function currentPhase() {
    if (_currentPhaseIndex < 0) _currentPhaseIndex = 0;
    return PHASES[_currentPhaseIndex];
}

//  Function: nextPhase
//      The phase following the <currentPhase>. Order follows the 
//      <PHASES> list.
function nextPhase() {
    var phaseIndex = _currentPhaseIndex + 1;
    phaseIndex %= PHASES.length;

    return PHASES[phaseIndex];
}

现在,当POST+PHASE_CHANGE 事件被触发时,在调用nextPhase() 时会引发异常,但不会在调用currentPhase() 时引发异常!经过一番调试,我确定,事实上,虽然模块中定义的所有函数在第一次进入define()主体时都已正确定义,但大部分其中一些在组件的回调中是未定义的。事实上,当组件被实例化时

if (!_observer)
    _observer = Crafty.e("TurnStateMachineObserver");
_observer.startListening();

init 函数(模块返回)中,定义了nextPhase(),但如果我进入_observer.startListening(),则不是,尽管currentPhase() 是。啊!我正在把我剩下的头发拉到这个上面。让我真正感到困惑的是这些函数是兄弟姐妹。如何定义更高范围的某些功能而其他功能不定义?!

【问题讨论】:

    标签: javascript requirejs craftyjs


    【解决方案1】:

    哇,笨蛋。显然,问题在于我用变量覆盖了函数。当我将其更改为

    ...
    var curPhaseVal = currentPhase();
    var nextPhaseVal = nextPhase();
    ...
    

    突然一切正常。那应该是不费吹灰之力的,但我还是花了一周的时间才找到。哦,好吧,回去工作!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      • 2015-03-16
      • 2015-03-02
      • 1970-01-01
      相关资源
      最近更新 更多