我的表格中有一个名为table0的表,其中包含几个dijit表单控件。我还有一个添加和删除按钮来添加新表并删除最后一个表。每个新表的ID都会增加1.因此,第一次添加add会给table1,第二次单击table2等。每次单击remove都会删除最后一个表。
这是添加功能:
function getNewTable() {
dojo.query('#addTable').onclick(function() {
var tableNode = dojo.byId('table'+count);
count++;
dojo.xhrGet({url: 'addTable.html',
handleAs: "text",
preventCache: true,
content:{fieldId:count} ,
load: function(data) {
var newTable = dojo.place(data, tableNode, 'after');
dojo.parser.parse(newTable);
},
error: function(error) {
var newTable = dojo.place("AJAX error: " + error, deductNode, 'after');
dojo.parser.parse(newTable);
}
});
});
}
删除功能是:
function removetable() {
dojo.query('#removeTable').onclick(function() {
if (count != 0) {
var tableNode = dojo.byId('table'+count);
count--;
dojo.xhrGet({url: 'removeTable.html',
handleAs: "text",
preventCache: true,
content: {fieldId:count},
load: function(data) {
dojo.destroy(tableNode);
},
error: function(error) {
var newTable = dojo.place("AJAX error: " + error, tableNode, 'after');
dojo.parser.parse(newTable);
}
});
}
});
}
count变量全局声明。
这些功能正常工作。
我遇到的问题是当你删除tableNode然后添加一个表节点时,该特定索引处的节点将不会执行dojo.parser.parse(newTable)。
我在代码中放了一些输出语句来调试,所有引用都是正确的。
只要你没有放置一个已被销毁的id的节点,它就能正常工作。
示例:单击add,创建table1 id,dojo解析它很好,一切都很好。单击删除,table1被销毁,仍然可以。再次单击add,创建table1,dojo不解析此节点。
我做错了吗?
答案 0 :(得分:1)
看起来我没有正确销毁dijit小部件。
我在remove函数的加载回调中添加了这个:
dojo.forEach(dijit.findWidgets(dojo.byId(deductNode)), function(w) {
w.destroyRecursive();
});
dojo.destroy(deductNode);
我假设用dojo破坏dom节点.destroy也会删除dijit小部件。
现在正常运作。