2

プロパティ " text " と関数 " save "を使用して MyViewModel オブジェクトを定義する次の Java スクリプト。

<script type="text/javascript">
    function MyViewModel() {
        this.text = ko.observable('');
    }

    MyViewModel.prototype.save = function () {
        alert(this.text()); // Works fine
        var data = ko.ToJSON(this); // Error: Object doesn't support this property or method ?
        $.ajax({
            type: 'POST',
            url: '/Person/Save',
            data: data,
            contentType: 'application/json',
            success: function (data) {
                alert(data);
            }
        });
    };
</script>

<script type="text/javascript">
    $(function () {
        var viewModel = new MyViewModel()
        ko.applyBindings(viewModel);
    });
</script>


そして、次のボタンが定義されています。

<button data-bind="click: save">SAVE</button>


ボタンがクリックされたときの結果:

  • this.text() を使用してプロパティにアクセスすると正常に動作します
  • java-script オブジェクトを JSON オブジェクトに変換する: ko.ToJSON(this) は機能せず、エラーがスローされます: 「エラー: オブジェクトはこのプロパティまたはメソッドをサポートしていません」

おそらく些細な何かが欠けているか間違っているのでしょうが、私には見えません。任意のヒント ?

4

2 に答える 2

4

Knockout にはメソッドがありませんが、ToJSONメソッドはtoJSONあります。

function MyViewModel() {
    this.text = ko.observable('');
}

MyViewModel.prototype.save = function () {
    alert(this.text()); // Works fine
    var data = ko.toJSON(this); // Works fine too
    $.ajax({
        type: 'POST',
        url: '/Person/Save',
        data: data,
        dataType: 'json',
        success: function (data) {
            alert(data);
        }
    });
};
于 2011-12-02T22:45:20.117 に答える
0

ビュー モデルを関数 (必要に応じてクラス) として定義しました。

function MyViewModel() {
    this.text = ko.observable('');
}

代わりに、var (オブジェクト) として定義する必要があります。

var MyViewModel = {
    text: ko.observable('');
}

次に、以下が正常に機能することを確認する必要があります。

var data = ko.ToJSON(MyViewModel);
于 2011-12-02T09:32:28.880 に答える