KnockoutJS ObservableArray pubsub如何?

时间:2019-02-25 00:15:25

标签: knockout.js publish-subscribe

我正在尝试使用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 :(得分:2)

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);