在某些(奇怪)情况下,小部件模板中不提供现有小部件

时间:2012-08-15 06:32:48

标签: dojo js-amd

这花了我一段时间。很久了。我一次与两个问题作斗争(循环依赖,通过重构修复,这个问题)。要将这个问题转化为JSFiddle需要大量的工作......但我认为这是值得的。 所以:

http://jsfiddle.net/EVbTL/3/

我定义了三个小部件:

  • r.AppMainScreen - 这是主应用程序的小部件。简单:只是一堆标签,以及一个包含一个简单按钮的按钮:

    // SUbmit form
    this.form.onSubmit = function(e){
        e.preventDefault();
        console.log("HERE");
        dialog = new r.RetypePasswordDialog();
        dialog.show();           
        return false;
    }
    

非常无趣。

  • r.RetypePasswordDialog() - 一个模板化的小部件,代表一个对话框。唯一有趣的是:

    < input name="password" id="${id}_password" data-dojo-attach-point="password" data-dojo-type="app.ValidationPassword" />

这是一个简单的自定义窗口小部件,在此文件中定义,用于验证。注意:我知道在这个小工作中有一个子类没有意义。请记住,这是示例

  • r.ValidationPassword()

增强的ValidationTextBox,带有一些额外的验证。

如果单击按钮,则会显示:

Uncaught Error: Could not load class 'app.ValidationPassword 

...?!? app.ValidationPassword已定义 。它应该在那里可用。一开始,我认为这是因为一个循环依赖(非常有趣,昨天:我不得不了解AMD循环依赖关系,试图找出这个问题......)

如果取消注释该行,则在脚本中执行:

TEST = new r.RetypePasswordDialog();

整个事情都有效。这是一个毫无意义的事实,我无法弄清楚为什么它会或者应该有所作为。

解释最受欢迎......我找不到任何!

谢谢,

Merc的。

1 个答案:

答案 0 :(得分:1)

app = new r.AppMainScreen( {});

您在此处重新定义了全局app变量,但正在尝试将其用作其类型系统的基础对象。使用var将变量范围扩展到函数。