dojo registry.byId在事件调用的函数中返回空值

ev7lccsx  于 2022-12-16  发布在  Dojo
关注(0)|答案(2)|浏览(151)

我继承了一个正在使用Dojo的项目,并且得到了一个非常奇怪的错误。
使用 AJAX 调用的结果构建菜单

mi = new dijit.MenuItem({ label:"Snapshot " + ro.name, onClick:onShowSnapshot });
mi.data = ro.auid;
snap_show.addChild(mi);

函数被调用

function onShowSnapshot(e) {
        var mi = registry.byId(e.target.id);
        current_snapshot = mi.data;
        showSnapshot();
}

但mi为null,尽管id正确,但它似乎无法找到小部件
Dojo版本为1.10
此页面中的大多数功能都可以正常工作,但来自菜单的事件总是产生此错误。

xt0899hw

xt0899hw1#

不知道代码的其余部分,通过将“e”对象输出到控制台来猜测设置和测试......我认为如果您将代码中的一行修改为以下内容,您将获得所需的结果:

var mi = registry.byId(e.target.parentNode.id);

下面是一个工作示例,其中“data”在onclick事件后输出到控制台:
https://jsfiddle.net/538g8aet/6/

qhhrdooz

qhhrdooz2#

处理程序中的目标似乎是MenuItem中的某个节点,而不是菜单项本身的.domNode。我看到了包含菜单项标签的节点。
您还可以使用registry.getEnclosingWidget来访问小部件,如果您不希望n函数处理所有菜单项,这可能会很方便。

function onShowSnapshot(e) {
        var mi = registry.getEnclosingWidget(e.target);
        current_snapshot = mi.data;
        showSnapshot();
}

相关问题