2012-02-29 2 views
1

Я кодирую плагин jquery, и мне нужны некоторые кнопки, чтобы иметь двойное состояние (например, редактировать/сохранять). Я получаю эту информацию через JSON и вставляю ее в виде:Объект данных в jquery undefined после 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: // jsfiddle .net/чтобы другие лучше поняли вашу проблему. Не нужно копировать весь код, а только часть, в которой проблема. Используйте «Добавить ресурсы» на левой стороне, чтобы добавить другие js-файлы. – Diode

ответ

0

Хорошо, я решил.

Благодаря диоду я попытался воспроизвести его в jsfiddle. Функция click не работала, поэтому я немного меняю свой код. Вместо того чтобы заменить с текстом:

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

ли это с объектом:

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

Вы можете увидеть его в действии: http://jsfiddle.net/p8vMR/9/