基于函数的视图模型不转换为JSON

时间:2015-01-30 14:35:27

标签: javascript json knockout.js

我有一个嵌套的viewmodel设置,需要表示为函数,因为必须有实例(除非我遗漏了一些东西)。一切都在UI中工作,我可以嵌套具有嵌套视图模型的视图模型,依此类推。

然而,在目前的形式中我收到错误

  

JavaScript运行时错误:传递一个返回ko.computed

值的函数

尝试拨打ko.toJSON(x);

当我在不需要实例的情况下定义vms时,这很有用,但是我的嵌套没有因此而改变。

以下是目前的示例。

var CityViewModel = function() {
    var self = this;

    self.Name = ko.observable("");
    self.ATMs = ko.observableArray();

    self.AddATM = function () {
        self.ATMs.push(new ATMViewModel);
    }

    self.GetJson = function() {
        alert(ko.toJSON(self)); //Area of interest
    }
}

var ATMViewModel = function() {
    var self = this;

    self.PostCode = ko.observable("");
    self.Features = ko.observableArray();

    self.AddFeature = function () {
        self.Features.push(new FeaturesViewModel());
    }
}

var FeaturesViewModel = function () {
    var self = this;

    self.Name = ko.observable("");
    self.Reference = ko.observable("");
}

ko.applyBindings(CityViewModel);

1 个答案:

答案 0 :(得分:1)

我花了一些时间来发现它...一个丢失的new关键字

ko.applyBindings(new CityViewModel());
//               ====

作为小提琴:http://jsfiddle.net/Quango/zf0dLLyr/

我建议Ryan提出调试建议:

<pre data-bind="text: ko.toJSON($data, null, 2)"></pre>

事实上,没有任何回报给了我暗示。看到 http://www.knockmeout.net/2013/06/knockout-debugging-strategies-plugin.html