Убейте живой объект данных Ractive

С RactiveJS объект, заданный как данные для Ractive, становится «живым», потому что библиотека добавила несколько обработчиков для обнаружения изменений в данных. Однако, если бы я хотел использовать тот же объект в другом месте, где не используется Ractive, например:

var objectForModuleB = objectForModuleA.get();

Изменение objectForModuleB повлияет на данные в objectForModuleA, поскольку объекты все еще «живые». Я работаю над этим, «выполняя stringify-parse», чтобы удалить обработчики (я работаю только с данными. Никаких вычислительных функций и объектов даты.):

var objectForModuleB = JSON.parse(JSON.stringify(objectForModuleA.get()));

Если вы просматривали документацию снова и снова. До сих пор я не встречал ничего подобного в документах.


person Joseph    schedule 09.06.2014    source источник
comment
Вы имеете в виду методы модификации массива и используете ли вы magic: true в параметрах? Можете ли вы предоставить более подробную информацию о структуре объекта и о том, как вы хотите, чтобы он вел себя? Я просто пытаюсь отделить проблемы с Ractive от проблем со ссылками на объекты javascript.   -  person martypdx    schedule 10.06.2014
comment
@martypdx Кажется, я не использую магический режим.   -  person Joseph    schedule 10.06.2014


Ответы (1)


Первоначальный ответ на GitHub.

Вам просто нужен глубокий клон. $.extend — правильный инструмент для этого. JSON.parse(JSON.stringify()) тоже может работать — в зависимости от ваших данных — но медленно. Если вы не хотите использовать jQuery, вы можете создать свою собственную функцию или просто взять ее из ядра jQuery.

Если вы хотите предотвратить обмен данными только между более активными экземплярами, вы можете использовать дополнительные функции (v0.5.x):

new Ractive({
    data: function () {
        return {
            x: 1,
            y: 2 
        };
    }
});

Таким образом, новые данные будут создаваться для каждого экземпляра ractive.

person Martin Kolárik    schedule 25.07.2014