Dijit表单字段在dojo.destroy之后没有在dojo.place上解析

时间:2011-03-01 17:29:51

标签: java javascript ajax dojo

我的表格中有一个名为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不解析此节点。

我做错了吗?

1 个答案:

答案 0 :(得分:1)

看起来我没有正确销毁dijit小部件。

我在remove函数的加载回调中添加了这个:

dojo.forEach(dijit.findWidgets(dojo.byId(deductNode)), function(w) {
    w.destroyRecursive();   
});
dojo.destroy(deductNode);   

我假设用dojo破坏dom节点.destroy也会删除dijit小部件。

现在正常运作。