Knockout JS - 将类序列化为JSON

时间:2012-01-06 13:33:12

标签: json serialization knockout.js

我正在学习Knockout JS(非常棒的框架!顺便说一句,我来自Silverlight,MVVM powa),我认为我阻止了一件简单的事情。

我有这样的课程User

var User = function () {
    this.Login = ko.observable();
    this.FirstName = ko.observable();
    this.LastName = ko.observable();
    this.Password = ko.observable();
    this.Email = ko.observable();
};

像这样的ViewModel:

var UsersPage = function () {
    /*
    * Properties
    */
    this.self = this;
    this.users = ko.observableArray([new User()]);
    this.newUser = ko.observable(new User());

    /*
    * Methods
    */
    this.saveUser = function () {
        alert(ko.ToJSON(this.newUser()));
    };
};

在HTML中,我有一个绑定到“newUser”属性的简单表单。当我提交表单时,我想在JSON中序列化属性以将其传递给WCF服务。 ko.ToJSON似乎不起作用。我尝试了几种方法,但我没有得到我期望的结果。

所以,我的问题是:如何将我的User属性序列化为JSON?

这是一个重现它的JSFiddle:http://jsfiddle.net/ZfSbR/5/

1 个答案:

答案 0 :(得分:5)

您的代码存在一些问题。

  • 该方法名为ko.toJSON(),而非ko.ToJSON()(请参阅documentation)。
  • this.self = this应为var self = this - 您无需引入self作为财产。
  • 最佳做法是始终在视图模型的方法中使用self而不是this,因为this可能指向不同的对象,而不是视图模型本身。
  • 如果您要将用户的可观察对象映射到输入,请使用newUser().property中的data-bind代替newUser.property

HERE 是修改后的代码。