使用knockout merge将历史状态对象与构造函数合并

时间:2016-03-29 10:44:33

标签: javascript knockout.js

我遇到的问题是将我的历史状态对象与我拥有的构造函数合并,然后将其保存在相同的历史状态中供以后使用。

插件示例页面:https://rawgit.com/grofit/knockout.merge/master/example.html

使用在淘汰合并插件页面中显示的示例,它使用像我自己的构造函数我已经构建了我的代码,但不幸的是,因为我相对较新的淘汰赛遇到了问题。

这是在knockout merge的示例中显示的一段代码

function Person()
        {
            this.Firstname = ko.observable();
            this.Surname = ko.observable();
        }

function ViewModel()
            {
                this.SimpleExampleModel = new Person();

                this.MergeSimpleExample = function() {
                    var personJson = { Firstname: "James", Surname: "Bond" };
                    ko.merge.fromJS(this.SimpleExampleModel, personJson);
                };
        };

            ko.applyBindings(new ViewModel());

现在我的代码:

(推送到历史记录的对象是构造函数的observables作为对象)

构造函数:

    var searchTerm = function () {
        this.MinPrice = ko.observable();     
    };


     lbx.vm = {
        term: new searchTerm(),  
        injectHistory: function () {

              // ko.merge.fromJS(this.term, history.state); Doesn't work
             // var json = ko.toJSON(history.state) - Doesn't work
            //var json = JSON.Parse(history.state) - Doesn't work
           //var json = { MinPrice: 222 }; Works
            var json = { "MinPrice": 222 }; // Works

            ko.merge.fromJS(this.term, json);

            console.log("injected");
        }

    };

正如你根据我的测试所看到的,每当我试图将我的JS对象变成json时它就不起作用,但是如果我手动构建json的话。

解决我的问题:https://jsfiddle.net/Badzpeed/05zdLgxh/1/

正如你在小提琴中看到的那样,当我弹出时,没有任何反应,可观察的值总是相同的,并且不会引发任何错误。

任何帮助将不胜感激!

先谢谢你

1 个答案:

答案 0 :(得分:1)

最后解决了我的问题,事实证明我忘了将构造函数添加到合并中,并且我还对正在将对象传递到我的历史状态的函数进行了双重调用,从而生成其中两个。

通过更改这两件事来解决问题。

感谢您的时间!