我在用dojo / registry检索按钮小部件时遇到问题。
我有一个小部件,在它的postCreate
-function内部,还调用了其他一些功能。在最后一个registry.byId()
中返回“undefined”,从而导致错误。具有提供ID的元素确实存在于html模板中。
我还在JSFiddle中创建了一个非常简单的工作版本,即使我在代码中尝试使用此变体,也会出现“未定义”的情况。 编辑:更新了小提琴
这是该代码的简短摘要,其中包含_setupButton-function中registry.byId()
的原始用法以及declare
-part之前的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还能做其他所有事情吗? 最佳答案
根据dojo documentation,小部件除了_TemplatedMixin
之外还需要_WidgetsInTemplateMixin
并从中继承:
由于dijit-button将是模板中的小部件,因此添加_WidgetsInTemplateMixin
并从中继承可以解决我的问题,而无需进行其他更改。我的代码现在看起来像这样(缩短):
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);
},
});
关于javascript - dojo:使用registry.byID返回 “undefined”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30711297/