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

时间:2017-02-01 14:07:59

标签: javascript dojo

我继承了一个正在使用Dojo的项目,并且收到了一个非常奇怪的错误。

使用ajax调用的结果构建菜单

CREATE TABLE #Table1
    ([Nominal] int, [MktBuyAmt] int)
;

INSERT INTO #Table1
    ([Nominal], [MktBuyAmt])
VALUES
    (7, 8),
    (5, 5),
    (3, 3)
SELECT  CASE WHEN NOMINAL = MKTBUYAMT THEN NOMINAL    ELSE MKTBUYAMT END AS NEWSS  FROM #TABLE1 

该函数被调用

NEWSS
8
5
3

但是mi虽然id正确,但是它是null,就像它找不到小部件一样

Dojo版本是1.10

此页面中的大多数内容都有效,但菜单中的事件始终会产生此错误。

2 个答案:

答案 0 :(得分:0)

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

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

这里可以看到一个工作示例,其中的数据是'在onclick事件后输出到控制台:

https://jsfiddle.net/538g8aet/6/

答案 1 :(得分:0)

看起来你在处理程序中获得的目标是MenuItem中的某个节点,但不是菜单项本身的.domNode。我看到包含菜单项标签的节点。

您还可以使用registry。getEnclosingWidget来访问窗口小部件。如果您不希望n函数处理所有菜单项,这可能会很方便。

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