Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript dojo:使用registry.byID返回;“未定义”;_Javascript_Dojo_Amd - Fatal编程技术网

Javascript dojo:使用registry.byID返回;“未定义”;

Javascript dojo:使用registry.byID返回;“未定义”;,javascript,dojo,amd,Javascript,Dojo,Amd,我在使用dojo/registry检索按钮小部件时遇到问题 我有一个小部件,在它的postreate-函数中调用了一些其他函数。在最后一个中,registry.byId()返回“undefined”,导致错误。html模板中确实存在具有所提供id的元素 我还在中创建了一个非常简单的工作版本,即使我在代码中尝试这个变体,我也会得到“未定义”编辑:更新的小提琴 下面是一个简短的代码摘要,介绍了在_setupButton函数中最初使用的registry.byId(),以及声明部分之前JSFIDLE的解

我在使用dojo/registry检索按钮小部件时遇到问题

我有一个小部件,在它的
postreate
-函数中调用了一些其他函数。在最后一个
中,registry.byId()
返回“undefined”,导致错误。html模板中确实存在具有所提供id的元素

我还在中创建了一个非常简单的工作版本,即使我在代码中尝试这个变体,我也会得到“未定义”编辑:更新的小提琴

下面是一个简短的代码摘要,介绍了在_setupButton函数中最初使用的
registry.byId()
,以及
声明
部分之前JSFIDLE的解决方案。两个版本都返回“未定义”:

}))

html与提供的JSFIDLE代码段中的相同。其他id(用于toher元素)也不起作用。 那么为什么
registry.byId()
可能对我不起作用呢?我是AMD风格的新手,代码已经使用
dijit.byId
使用了旧语法

编辑:

我发现小部件没有在注册表对象中注册。原因可能是什么?如果找不到模板,我将得到一个错误404,因此我们可以排除这个原因

Edit2:


另外
document.getElementById()
将只返回
null
。我认为传递templateString就足够了,dojo会做其他的事情吗?

我注意到您的代码中有一些可能需要特别关注的问题:

require([
    "dojo/ready",
    "dijit/registry"
], function(
    ready,
    dijitRegistry
) {
    ready( function() {
        var grid = dijitRegistry.byId("startCalculationButton");
        console.info(grid)
        grid.set("disbaled", true);
    });
});
我认为应该是: require([“dojo/ready”,“dijit/registry”],函数(ready,registry){…} 然后您可以使用注册表.byId(“somename”)

如果在所需语法上使用dgrid/extensions/DijitRegistry, 然后,您应在所需语法后包含DijitRegistry(请提醒,它区分大小写),但根据我的经验,我仅将其用于dgrid mixin

希望这可以帮助…

根据小部件的需要,除了
\u templateddmixin
\u WidgetsInTemplateMixin
并从中继承:

但是,如果我们希望在模板中有一个小部件,如:

<div class="combinedDateTime">
   <div data-dojo-type="dijit/form/DateTextBox"></div>
   <div data-dojo-type="dijit/form/TimeTextBox"></div>
</div>

最初创建/放置
startCalculationButton
的原因是什么?我忘了粘贴一行代码。我用dojo/text拉模板!如中所述,并将此字符串传递给
templateString
-成员。我还有更多的工作要做吗?嗯……现在我有点困惑。当我发布我的问题时der JSFIDLE工作了…现在它不工作了,我理解你为什么发布这个提示。但是像你建议的那样更改小提琴没有帮助,JSFIDLE仍然不适合我…我现在真的很困惑…这是我编辑后的版本:按钮不会显示,但至少它可以读取网格是什么(按钮)谢谢!我用新链接更新了原始帖子。不幸的是,你的想法对我的实际问题没有帮助。请参阅原始帖子。还有……怎么样,我注意到你没有包含claro css,所以按钮不会显示……然后,我用你之前编写的dom/ready对其进行了重新编码,你也可以看到这个链接:my p就是说,你必须先让dojo解析器解析你的HTML文档,这样它就可以被dijit/注册表识别出来……很好的回答,解决了我的问题,我无法从小部件模板中检索字符串id,现在我可以在添加了它之后再检索
<div class="combinedDateTime">
   <div data-dojo-type="dijit/form/DateTextBox"></div>
   <div data-dojo-type="dijit/form/TimeTextBox"></div>
</div>
define(["dojo/_base/declare", "dijit/registry", "dijit/_Widget", "dijit/_TemplatedMixin", "dijit/_WidgetsInTemplateMixin", "dojo/text!./templates/template.html"],
function(declare, registry, _Widget, _TemplatedMixin, _WidgetsInTemplateMixin, templateStringContent) {

return declare([_Widget, _TemplatedMixin, _WidgetsInTemplateMixin],
{
    templateString: templateStringContent,

    postCreate() {
       this._setupButton();
    },
    _setupButton: function() {
       buttonWidget = registry.byId("startCalculationButton");
       buttonWidget.set("disabled", true);
    },
});