Объект данных в jquery не определен после replaceWith

Я кодирую плагин jquery, и мне нужно, чтобы некоторые кнопки имели двойное состояние (например, редактирование/сохранение). Я получаю эту информацию через JSON и вставляю ее в кнопку как:

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 не обязательно, поэтому, если вы придумаете другое решение, все будет в порядке.


person subarroca    schedule 29.02.2012    source источник
comment
если возможно, сделайте демонстрацию на jsfiddle.net, чтобы другие лучше поняли вашу проблему. Не нужно копировать весь код, а только ту часть, в которой возникла проблема. Используйте «Добавить ресурсы» слева, чтобы добавить другие файлы js.   -  person Diode    schedule 01.03.2012


Ответы (1)


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

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

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/.

person subarroca    schedule 01.03.2012