Dojo 1.9 NumberTextBox无法正常工作?

时间:2014-04-10 23:35:55

标签: javascript jsp dojo dojo-1.9

我试图在我的代码中使用Dojo NumberTextBox,并且出于某种原因,当我移植"时,示例代码不起作用。它进入我的网站。我直接从Dojo 1.9文档中提取了这个示例代码,它可以工作:

<html >
<head>

    <link rel="stylesheet" href="../../_static/js/dojo/../dijit/themes/claro/claro.css">

    <script>dojoConfig = {async: true, parseOnLoad: true}</script>
    <script src='../../_static/js/dojo/dojo.js'></script>

    <script>
require(["dojo/parser", "dijit/form/NumberTextBox"]);
    </script>
</head>
<body class="claro">
    <label for="q05">Integer between -20000 to +20000:</label>
<input id="q05" type="text"
    data-dojo-type="dijit/form/NumberTextBox"
    name= "elevation"
    required="true"
    value="3000"
    data-dojo-props="constraints:{min:-20000,max:20000,places:0},
    invalidMessage:'Invalid elevation.'" />
</body>
</html>

这是我的JSP代码,它以一系列JSP页面开始。如您所见,我已导入require()块并我认为它已正确放置(它显示在HTML页面的头部):

<script src="//ajax.googleapis.com/ajax/libs/dojo/1.9.3/dojo/dojo.js.uncompressed.js"></script>
<script src="${pageContext.request.contextPath}/js/mystuff.js"></script>
<script type="text/javascript" >
    dojoConfig={async: true, parseOnLoad: true};
    require(["dojo/parser", "dijit/form/NumberTextBox"]);
</script>

<form:form id="formInfo" commandName="formInfo" action="${flowExecutionUrl}" enctype="multipart/form-data">


<div id="YIBOtherContainer" style="display:none;"> <%-- hidden to start with --%>
    <form:input id="yearsInBusinessOther" path="yearsInBusinessOther"
                data-dojo-type="dijit/form/NumberTextBox"
                data-dojo-props="constraints:{min:6,max:99,places:0}, invalidMessage:'Invalid value.'" />
    <div class="formRow otherIndent">
        <form:errors cssClass="formError" path="yearsInBusinessOther"  />
    </div>
</div>

</form:form>

这里是上面的JSP代码生成的HTML INPUT标记:

                    <input id="yearsInBusinessOther" name="yearsInBusinessOther" data-dojo-props="constraints:{min:6,max:99,places:0}, invalidMessage:&#39;Invalid value.&#39;" data-dojo-type="dijit/form/NumberTextBox" type="text" value="99"/>

但是没有验证。我可以在表单字段中输入任何内容,但我从未收到错误消息,更改格式或其他任何内容以指示任何验证都已触发。

知道Dojo 1.9的人是否可以看到这个并且(希望)指出我做错了什么?

2 个答案:

答案 0 :(得分:3)

使用dojoConfig配置Dojo时,必须先将dojoConfig配置置于之前加载dojo.js。在文档中,您可以注意到它们以正确的顺序加载:

<script>dojoConfig = {async: true, parseOnLoad: true}</script><!-- First -->
<script src='../../_static/js/dojo/dojo.js'></script><!-- Second -->

但在你的例子中:

<script src="//ajax.googleapis.com/ajax/libs/dojo/1.9.3/dojo/dojo.js.uncompressed.js"></script><!-- First but should be second! -->
<script type="text/javascript">
    dojoConfig={async: true, parseOnLoad: true}; // Second, but should be first!
    require(["dojo/parser", "dijit/form/NumberTextBox"]);
</script>

当加载Dojo时,它正在检查dojoConfig中配置的属性。但是,如果你颠倒了订单,那么它将无效,引用Dojo documentation

  

请注意,dojoConfig是在dojo.js之前的脚本块中定义的   加载。这是至关重要的 - 如果相反,配置   属性将被忽略。

在这种情况下,parseOnLoad被忽略,这意味着您的输入字段永远不会转换为dijit/form/NumberTextBox

所以我建议将你的代码分成:

<script type="text/javascript">
    dojoConfig={async: true, parseOnLoad: true};
</script>
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.9.3/dojo/dojo.js.uncompressed.js">   </script>
<script type="text/javascript">
    require(["dojo/parser", "dijit/form/NumberTextBox"]);
</script>

答案 1 :(得分:0)

您可以使用djConfig="parseOnLoad:true"在一行中执行相同的dojo配置。

<script src="//ajax.googleapis.com/ajax/libs/dojo/1.9.3/dojo/dojo.js.uncompressed.js" djConfig="parseOnLoad:true"></script>