我有以下功能:

function setAccounts(data){
    var node = dijit.byId("res");
    dojo.empty("res");
    for(var i = 0; i <= data.length; i++){
        var itemWidget = new dojox.mobile.ListItem({
            id: data[i].id,
            rightText: "€ "+data[i].amount,
            moveTo: "transactions",
            label: data[i].name
        });
        node.addChild(itemWidget);
        dojo.connect(itemWidget, "onclick", getTransactions(data[i].id));
    }
}


在页面加载时,它不会将新itemWidget的onClick事件连接到函数getTransactions,而只是运行该函数。错误在哪里?

数据是通过ajax获取的json,我已经检查过json读取/解析中是否没有错误。

最佳答案

Dojo的“ connect”方法期望将HTMLElement作为第一个参数。但是,您创建的dojo小部件实际上是非常特殊的JavaScript对象-尽管它们倾向于使HTMLElement在.domNode属性下可用。

实际上,我知道的最简单的解决方案是使用ListItem中可用的onClick属性。

var itemWidget = new dojox.mobile.ListItem({
        id: data[i].id,
        rightText: "€ "+data[i].amount,
        moveTo: "transactions",
        label: data[i].name,
        onClick: dojo.hitch(this, 'getTransactions', data[I].id)
    });


如果确实将connect-其他事件添加到窗口小部件,我建议将其写为itemWidget.connect(targetNode, etc-据我所知,如果/当窗口小部件本身被破坏时,它将删除事件侦听器。

07-24 09:44
查看更多