Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Изменение значений JSON в атрибуте data (https://javascript.ru/forum/misc/40901-izmenenie-znachenijj-json-v-atribute-data.html)

Askhsiv_1 23.08.2013 20:06

Изменение значений JSON в атрибуте data
 
привет всем! поможите ибо заблудился и не нахожу ответов)

есть элемент
<div id="test" data-json='{"param_1":"value_1","param_2":""}'></div>

и вот такой код:
var foo = $('#test').data('json');
console.log(foo);

if(!foo.param_2) foo.param_2 = 'value_2';
	
var bar = $('#test').data('json');
console.log(bar);

первый console.log выводит:
Object { param_1="value_1", param_2=""}
и это понятно, но второй:
Object { param_1="value_1", param_2="value_2"}
как? почему? ведь data не переназначалась!
как будто в переменную foo назначилась ссылка на объект data.
вот собственно и вопрос: как избежать такого поведения?


P.S.
знаю что JSON можно и так достать:
var foo = $.parseJSON($('#test').attr('data-json'));

но тогда, если действительно понадобится его переназначить, так не получится:
$('#test').data('json', new_json_obj);

придётся и новое значение задавать аналогично:
$('#test').attr('data-json', JSON.stringify(new_json_obj));

и вообще такое решение не красиво и убивает всю логику работы с data

Askhsiv_1 23.08.2013 20:15

пока писал вопрос придумал вот такой костыль:
var foo = $.extend({}, $('#test').data('json'));

но неужели нету более адекватного и элегантного решения?


Часовой пояс GMT +3, время: 03:27.