2012-02-29 2 views
1

jquery 플러그인을 코딩 중이므로 편집/저장과 같은 이중 상태가 필요한 버튼이 있습니다. JSON을 통해이 정보를 가져 와서 버튼에 삽입합니다 :jquery의 데이터 객체가 replaceWith 이후에 정의되지 않았습니다.

node 
    - current //['primary'/'secondary'] 
    - primary // some info 
    - secondary // some info 

버튼을 클릭하면 작업을 변경합니다. 그래서 전체 링크를 템플릿과 button.data에서 얻은 정보로 대체하려고합니다. innerHtml뿐만 아니라 바깥 쪽을 바꾸려면 'replaceWith'을 사용해야합니다. 그런 다음 '데이터'을 새 버튼에 복사하고 이전 버전을 삭제하는 것이 이상적입니다.

changeButtonAction : function(button, selector){ 
     var node = button.data('node'), 
      info; 

     if(node.current == 'primary'){ 
      info = node.secondary; 
      node.current = 'secondary'; 
     }else{ 
      info = node.primary; 
      node.current = 'primary'; 
     } 

     button.replaceWith(multiReplace(OPERATION_ITEM, info, true)); 
     button.data('node', $.extend(true, {}, node)); 

     ... //bit of interaction 
} 

것은입니다 : 그것은 정의되지 않은 말한다으로 일단 기능 에서 나는 새 데이터를 잃게. 누군가 도움을 줄 수 있습니까? 'replaceWith'를 사용하면 꼭 필요한 것은 아니므로 다른 솔루션을 생각해 내면 괜찮을 것입니다.

+0

가능한 경우 HTTP에서 데모를 확인하십시오 :

var button2 = $(multiReplace(OPERATION_ITEM, info, true)) .data('node', $.extend(true, {}, node)); button.replaceWith(button2); 

당신은 행동에 그것을 볼 수 // jsfiddle .net/다른 사람들이 당신의 문제에 대해 더 잘 이해할 수 있도록. 모든 코드를 복사 할 필요는 없지만 문제가있는 부분 만 복사하십시오. 다른 js 파일을 추가하려면 왼쪽의 '리소스 추가'를 사용하십시오. – Diode

답변

0

좋아, 해결했습니다.

다이오드로 인해 jsfiddle에서 재현 해 보았습니다. 클릭 기능이 작동하지 않아 코드가 조금 변경됩니다. 대신 텍스트로 대체하는 :

button.replaceWith(multiReplace(OPERATION_ITEM, info, true)); 
button.data('node', $.extend(true, {}, node)); 

는 객체와 함께 수행 http://jsfiddle.net/p8vMR/9/

관련 문제