当表单具有DateTextBox时,无法获取对dijit表单的引用 [英] Cannot get a reference to a dijit form when the form has a DateTextBox

查看:116
本文介绍了当表单具有DateTextBox时,无法获取对dijit表单的引用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当表单包含DateTextBox时,我无法获取对dijit窗体小部件的引用。下面的代码片段演示了这个问题。执行时,警报框会显示undefined。但是,如果我摆脱了< input ... id =dateTextBox... /> ,我可以获得表单窗口小部件的引用。

 <!DOCTYPE HTML> 
< html lang =en>
< head>
< meta charset =utf-8>
< title>< / title>
< link rel =stylesheettype =text / csshref =// ajax.googleapis.com/ajax/libs/dojo/1.9.1/dijit/themes/claro/claro.css媒体= 屏幕 >

<! - 加载dojo并通过数据属性提供配置 - >
< script type =text / javascriptsrc =// ajax.googleapis.com/ajax/libs/dojo/1.9.1/dojo/dojo.js
data-dojo-config =async:true,parseOnLoad:true>
< / script>
< script type =text / javascript>
require([dijit / form / TextBox,dijit / form / DateTextBox]);
< / script>

< script type =text / javascript>
require([dojo / parser,dijit / registry,dijit / form / Form,dojo / domReady!],
函数(解析器,注册表){
parser.parse();
alert(registry.byId(frm_test));
});
< / script>
< / head>

< body class =claro>
< div data-dojo-type =dijit / form / Formid =frm_testencType =multipart / form-dataaction =method =>
< input type =textid =textBoxname =textBoxdata-dojo-type =dijit / form / TextBox/>
< input type =textid =dateTextBoxname =dateTextBoxdata-dojo-type =dijit / form / DateTextBox/>
< / div>
< / body>
< / html>


解决方案

我建议将 registry.byId 成为准备好通话。



保持 parse onLoad:true ,remove

  require([dijit / form / TextBox,的dijit /形式/日期文字]);解析器将自动需要(当dojo> = 1.8时),并使用以下内容:$ / $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ > 

 < script type =text / javascript> 
require([dojo / ready,dijit / registry,dojo / domReady!],
函数(ready,registry){
//默认情况下这个准备好的调用将在
// ready调用用于解析parseOnLoad为true
ready(function(){
alert(registry.byId(frm_test));
});
});
< / script>




请注意,等待dojo / domReady!在使用窗口小部件时,通常不需要
。许多小部件不应该被初始化或
访问,直到以下模块加载和执行:




  • dojo / uacss

  • dijit / hccss

  • dojo / parser



你应该通常把你的代码
放在一个dojo / ready()回调中。

http://dojotoolkit.org/reference-guide/1.9/dojo/domReady.html



http: //dojotoolkit.org/reference-guide/1.9/dojo/ready.html#dojo-ready


I am having trouble getting a reference to the dijit form widget when the form contains a DateTextBox. The code snippet below demonstrates the problem. When executed, the alert box says "undefined". However, if I get rid of <input ... id="dateTextBox"... />, I am able to get a reference to the form widget.

<!DOCTYPE HTML>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title></title>
        <link rel="stylesheet" type="text/css" href="//ajax.googleapis.com/ajax/libs/dojo/1.9.1/dijit/themes/claro/claro.css" media="screen">

        <!-- load dojo and provide config via data attribute -->
        <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/dojo/1.9.1/dojo/dojo.js"
            data-dojo-config="async: true, parseOnLoad: true">
        </script>
        <script type="text/javascript">
            require(["dijit/form/TextBox", "dijit/form/DateTextBox"]);
        </script>

        <script type="text/javascript">
            require(["dojo/parser", "dijit/registry", "dijit/form/Form", "dojo/domReady!"],
            function(parser, registry) {
                parser.parse();
                alert(registry.byId("frm_test"));
            });
        </script>
    </head>

    <body class="claro">
        <div data-dojo-type="dijit/form/Form" id="frm_test" encType="multipart/form-data" action="" method="">  
            <input type="text" id="textBox" name="textBox" data-dojo-type="dijit/form/TextBox" />
            <input type="text" id="dateTextBox" name="dateTextBox" data-dojo-type="dijit/form/DateTextBox" />
        </div>
    </body>
</html>

解决方案

I'd recommend wrapping the registry.byId into a ready call.

Keep parse onLoad: true, remove

require(["dijit/form/TextBox", "dijit/form/DateTextBox"]); 

as the parser will auto require (when dojo>= 1.8) and use the following:

<script type="text/javascript">
    require(["dojo/ready", "dijit/registry", "dojo/domReady!"],
        function(ready, registry) {
            // by default the prioirty of this ready call will be after the 
            // ready call used to parse when parseOnLoad is true
            ready(function() { 
                alert(registry.byId("frm_test"));
            });
    });
</script>

Note that waiting for dojo/domReady! to fire is often not sufficient when working with widgets. Many widgets shouldn’t be initialized or accessed until the following modules load and execute:

  • dojo/uacss
  • dijit/hccss
  • dojo/parser

Thus when working with widgets you should generally put your code inside of a dojo/ready() callback

http://dojotoolkit.org/reference-guide/1.9/dojo/domReady.html

http://dojotoolkit.org/reference-guide/1.9/dojo/ready.html#dojo-ready

这篇关于当表单具有DateTextBox时,无法获取对dijit表单的引用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆