我遇到的问题是将我的历史状态对象与我拥有的构造函数合并,然后将其保存在相同的历史状态中供以后使用。
插件示例页面: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/
正如你在小提琴中看到的那样,当我弹出时,没有任何反应,可观察的值总是相同的,并且不会引发任何错误。
任何帮助将不胜感激!
先谢谢你
答案 0 :(得分:1)
最后解决了我的问题,事实证明我忘了将构造函数添加到合并中,并且我还对正在将对象传递到我的历史状态的函数进行了双重调用,从而生成其中两个。
通过更改这两件事来解决问题。
感谢您的时间!