我正在尝试构建 UI 元素的动态列表。我现在可以对 UI 列表进行硬编码,一切正常。但是,我希望它是可扩展的,因此我试图找出一种传递 id 标签和要调用的相应函数的方法。本质上,我的 ajax 调用的回调函数没有被执行,尽管我发布了正确的数据,并收到了正确的响应。这是代码:
myModule = function () {
var titleUI = Object.create(ChainUI());
var memcachedId = '<?php echo $memcachedId;?>';
return {
printChain: function(data) {
alert("printchain");
var territories = jQuery.parseJSON(data);
titleUI.makeChainTable();
territories.forEach(function(territory) {
titleUI.territoryDisplay(territory);
});
titleUI.tableDecorator($('#chainTable'));
},
loadChain: function() {
titleUI.destroyChainTable();
var url = 'traffichandler.php';
var instruction = {'instruction': 'titleChain', 'method': 'printChain', 'memcachedId': memcachedId.toString()};
$.post(url, instruction, this.printChain);
},
loadDefault: function() {
titleUI.loadUI(['Title Chain'], [this.loadChain]);
}
};
}();
对应的titleUI代码如下:
var ChainUI = function() {
return {
loadUI: function(uiList, funcList) {
$('#uiFunctions').empty();
for(var i in uiList) {
var toDom = '<li id="'+uiList[i]+'">';
toDom += uiList[i];
toDom += '</li>';
$('#uiFunctions').html(toDom);
}
for(var i = 0; i < uiList.length; i++) {
var myFunc = funcList[i];
$('#uiFunctions').delegate($('#'+uiList[i]), "click",
function() {myFunc();}
);
}
},
}
在 myModule.loadDefault 中,我可以让 this.loadChain 触发。我无法让 $.post 中的 this.printChain 工作。如果删除所有动态的东西 this.printChain 没有问题。不要太拘泥于语法,因为我的语法很好。如何让 ajax 调用恢复工作?谢谢!