Моей Нокаут модели (версия 3.3.0 от нокаута) что-то вроде этого:Избегайте ошибки циклического значения ввиду, Нокаут
var Node= function(id,name,parentNode) {
var self = this;
self.id= ko.observable(id);
//more here...
self.nodes = ko.observableArray([]);
self.parentNode = parentNode;
}
Когда эта модель связана с тем, Нокаут выдает ошибку в консоль (неразрывный ошибка):
TypeError: cyclic object value
...m http://www.json.org/json2.js ");return E.stringify(a.a.c(b),c,g)},zc:function(c...
knockout-3.3.0.js (line 20, col 344)
Таким образом, я предполагаю, что где-то внутри, нокаут вызывает метод JSON.stringify. Объединив ответы от here и here, я пришел к выводу, что если я добавлю метод «toJSON» в свою модель, где я исключил свойство «parentNode», ошибка исчезнет. И так оно и есть.
Моего toJSON функция:
self.toJSON = function(){
return {
id: self.id(),
name: self.name(),
//exclude parentNode
nodes: ko.toJSON(self.nodes())
};
}
Так что мой вопрос: есть ли более эффективный способ, чтобы написать эту функцию, чтобы быть более универсальными? Я хочу включить все (неизвестные) свойства, за исключением нескольких (известных).
Вызов ko.toJSON на модели, а затем удаление объекта, поскольку первая ссылка предполагает, что это не сработает из-за циклической ссылки. Итак, любые другие альтернативы?
EDIT: Подразумеваемый звонок toJSON при привязке осуществляется другим плагином ko, но это действительно может быть что угодно. Я установка изолированной скрипку, чтобы продемонстрировать как проблему, и мое временное решение здесь: http://jsfiddle.net/zq09znLa/1/
проверка рабочего образца здесь http://jsfiddle.net/LkqTU/24754/. дайте мне знать приветствия –
@supercool Извините, но ваш ответ не связан с моей проблемой. См. Мое редактирование, я добавил воспроизводимую скрипку. – pkExec
Зарегистрируйте узлы в словаре по id, а затем храните узлы в виде массива идентификаторов, с вычисленными для генерации фактического списка узлов. Аналогичным образом сохраните идентификатор родительского узла и вычислите (если хотите), чтобы получить сам узел. –