【发布时间】:2015-06-08 14:04:47
【问题描述】:
我在使用 dojo/registry 检索按钮小部件时遇到问题。
我有一个小部件,其中的postCreate-function 调用了其他一些函数。在最后一个 registry.byId() 返回“未定义”导致错误。具有提供的 id 的元素确实存在于 html 模板中。
我还在JSFiddle 中创建了一个非常简单的工作版本,即使我在我的代码中尝试这个变体,我也会得到“未定义”。 编辑: 更新小提琴
这里是在 _setupButton 函数中最初使用 registry.byId() 的代码的简短摘要,以及来自 declare 部分之前的 JSFiddle 的解决方案。两个版本都返回“未定义”:
define(["dojo/_base/declare", "dojo/_base/array", "dojo/_base/lang", "dojo/dom-class", "dojo/number", "dojo/parser", "dojo/ready", "dojo/dom-construct", "dijit/registry", "dijit/form/NumberTextBox", "dijit/_Widget", "dijit/_TemplatedMixin", "dijit/Menu", "dijit/MenuItem", "dojo/text!./templates/template.html"],
function(declare, array, lang, domClass, number, parser, ready, domconstruct, registry, NumberTextBox, _Widget, _TemplatedMixin, Menu, MenuItem, templateStringContent) {
parser.parse();
ready(function () {
console.info(registry.byId("startCalculationButton"));
});
return declare([_Widget, _TemplatedMixin],
{
templateString: templateStringContent,
postCreate() {
this._setupButton();
},
_setupButton: function() {
buttonWidget = registry.byId("startCalculationButton");
buttonWidget.set("disabled", true);
},
});
});
html 与提供的 JSFiddle-Snippet 中的相同。其他 id(对于 toher 元素)也不起作用。
那么为什么registry.byId() 可能对我不起作用?我是 AMD 风格的新手,代码已经使用 dijit.byId 的旧语法。
编辑:
我发现该小部件未在注册表对象中注册。这可能是什么原因?如果找不到模板我会得到一个错误404,所以这个原因我们可以排除。
编辑2:
同样document.getElementById() 只会返回null。我认为传递 templateString 就足够了,dojo 会做其他所有事情吗?
【问题讨论】:
-
什么负责最初创建/放置
startCalculationButton? -
我忘了粘贴一行代码。我用 dojo/text 拉模板!如dojo documentation 中所述,并将此字符串传递给
templateString-Member。我还有更多工作要做吗?
标签: javascript dojo amd