Круговая зависимость в Knockout

У меня здесь большая проблема.

У меня есть вычисляемая переменная, которая обновляется после изменения наблюдаемого массива.

Проблема в том, что после оценки вычисляемой переменной мне нужно изменить наблюдаемые значения массива, используя новое вычисленное значение.

Как я могу это сделать?

Мой первый подход заключался в создании функции, которая подписывалась бы на вычисляемую переменную и вносила все необходимые изменения в наблюдаемую там. Проблема? Это приведет к тому, что наблюдаемое снова будет обновлено, и это снова уведомит вычисляемое.

У меня круговая зависимость.

Я не знаю, как это решить.

Есть идеи, пожалуйста?


person user949050    schedule 13.06.2013    source источник
comment
Вы можете разместить свой код? Я действительно не понимаю, почему вычисляемый хочет обновлять одну из своих зависимостей. Звучит неправильно.   -  person Kyeotic    schedule 13.06.2013
comment
да почтовый индекс. Часто циклические зависимости являются ошибкой проектирования.   -  person Brandon    schedule 13.06.2013
comment
В Knockoutjs есть меры предосторожности против циклических ссылок, поэтому он просто работает из коробки, см. jsfiddle.net/mPpcR/1. Но это зависит от ваших реальных расчетов, будет ли результат правильным.   -  person mhu    schedule 14.06.2013


Ответы (1)


Я решил эту проблему с помощью подписки. У меня было два наблюдаемых массива, в каждом из которых есть наблюдаемое. Я подписался один на другой, и у меня это сработало. Вот пример того, как подписаться через наблюдаемые массивы ..

self.teams.subscribe(function() {
            ko.utils.arrayForEach(self.teams(), function(item) {
                item.player.subscribe(function(newValue) {
                    if (self.teams() != "" && self.teams() != null) {
                        ko.utils.arrayForEach(self.GroupofTeams(), function (team) {
                            ..........code.....
                        });
                    } 
                });
            });
        });
person user1032957    schedule 10.09.2013