knockoutjs observablearray pubsub как? - PullRequest
       12

knockoutjs observablearray pubsub как?

0 голосов
/ 25 февраля 2019

Я пытаюсь использовать сообщения pubsub для уведомления viewmodel об изменениях, внесенных в observablearray.

viewModel1 имеет observableArray1 viewMOdel2 также использует observableArray2

Я использую это для широковещательных изменений:

this.observableArray1.subscribe(function (newValue) {
            this.observableArray1().push(newValue);
            pubsub.notifySubscribers(newValue, "observableArray1");
        },
            this);

и с другой стороны:

postbox.subscribe(function (newValue) {
            this.observableArray1().(newValue);
        },
            this,
            "observableArray1");

Я получаю эту ошибку:

Uncaught TypeError: Converting circular structure to JSON
    at JSON.stringify (<anonymous>)
    at Object.Gb (knockout-3.4.2.js:22)
    at Object.a.toJSON (knockout-3.4.2.js:56)
    at text (eval at parseBindingsString (knockout-3.4.2.js:68), <anonymous>:3:67)
    at update (knockout-3.4.2.js:99)
    at function.a.B.i (knockout-3.4.2.js:73)
    at Function.Uc (knockout-3.4.2.js:52)
    at Function.Vc (knockout-3.4.2.js:51)
    at Function.U (knockout-3.4.2.js:51)
    at Function.ec (knockout-3.4.2.js:50)

1 Ответ

0 голосов
/ 26 февраля 2019
this.observableArray1.subscribe(function (newValue) {
            this.observableArray1().push(newValue);
            pubsub.notifySubscribers(newValue, "observableArray1");
        },
            this);

Добавление newValue к observableArray1 приводит к повторному вызову подписки, что снова добавляет значение, что вызывает повторный вызов подписки, создавая бесконечный цикл, следовательно, возникает ошибка круговой структуры.Нет необходимости добавлять newValue в наблюдаемый массив в подписке, поскольку он уже существует.

this.observableArray1.subscribe(function (newValue) {
            pubsub.notifySubscribers(newValue, "observableArray1");
        },
            this);
...