2011-03-01 2 views
0

양식에 여러 dijit 양식 컨트롤이있는 table0이라는 테이블이 있습니다. 또한 새 테이블을 추가하고 마지막 테이블을 제거하기 위해 추가 및 제거 버튼이 있습니다. 각각의 새 테이블에는 1 씩 증가 된 ID가 있습니다. 따라서 add의 첫 번째 클릭은 table1, 두 번째 클릭 table2 등을 제공합니다. 제거 할 때마다 마지막 테이블이 제거됩니다.Dijit 양식 필드가 dojo.destroy 다음에 dojo.place에서 구문 분석되지 않습니다.

 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); 
         } 
       }); 
      } 
     }); 
    } 

카운트 변수 선언 전체적으로 여기

는 추가 기능이다.

기능이 올바르게 작동합니다.

문제점은 tableNode를 제거한 후 테이블 노드를 추가 할 때 특정 인덱스의 노드가 dojo.parser.parse (newTable)를 실행하지 않을 때 발생합니다.

디버깅을 위해 일부 출력 문을 코드에 넣었으며 모든 참조가 정확합니다.

그래서 파괴 된 ID를 가진 노드를 배치하지 않는 한 잘 작동합니다.

예 : add를 클릭하고, table1 id가 생성되고, dojo가 구문 분석을 잘 수행하며, 모두 정상입니다. 제거를 클릭하면 table1이 파괴되지만 여전히 ok입니다. add를 다시 클릭하면 table1이 작성되고 dojo는이 노드를 구문 분석하지 않습니다.

내가 잘못 했나요?

답변

1

dijit 위젯을 올바르게 파괴하지 않은 것처럼 보입니다.

난 제거 기능의로드 내부 콜백이 첨가 :

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

I는 또한 인 Dijit 위젯을 제거 할 dojo.destroy과 DOM 노드 파괴 가정.

지금 올바르게 작동합니다.

관련 문제