0

重複の可能性:
JavaScript オブジェクト インスタンスのデシリアライズ

javascript に次のコンストラクター オブジェクトの配列があります。

 function MenuViewModel() {
    var self = this;
    var courseOptionObject = {};

    courseOptionObject["Options"] = [];
    self.ShowHide = ko.observable(false);

        self.Id = ko.observable(getId()); 
        self.Name = ko.observable();
        self.CourseName = ko.observable();
        self.Sequence = ko.observable('1');

        courseOptionObject["MenuId"] = self.Id();
        self.CourseOptions = ko.observable(new CourseOptionViewModel(courseOptionObject));                                             

    if (typeof MenuViewModel.saveButtonControll == "undefined") { //static members of class
        MenuViewModel.saveButtonControll = ko.observable(new buttonModel({ Text: "Save & Continue", Disabled: true, Visible: true }));
        MenuViewModel.IsTextEnable = ko.observable(true);
    }

    self.showDeleteIcon = function (data, event) { 
       data.ShowHide(true); 
    };

    //Hide the delete button from the menu ( call at mouseleave form the menu )
    self.hideDeleteIcon = function (data, event) {
        data.ShowHide(false); 
    };

    self.Errors = ko.validation.group(self);
}

私の配列は:

var jObectArray = new Array();
for(var i = 0; i < 5; i++)
{
 jObejctArray.push(new MenuViewModel());
}

私は ajax 経由で送信しています:

$.ajax({
   url :'urltoserver',
   type: 'POST',
   data: { array : JSON.stringify(jObectArray) },
   dataType: 'JSON'
 });

しかし、サーバーに空の配列を取得しています。誰が私が欠けているものを教えてもらえますか?

編集

console.log(jObejctArray) 出力は (配列内の 2 obejct) です:

[
{"ShowHide":false,"Id":"8c4c470d-2b25-4070-8d3e-e307e9d49107",
"Name":"Menu-1","CourseName":"course-1","Sequence":1,
"CourseOptions":{"MenuId":"8c4c470d-2b25-4070-8d3e-e307e9d49107",
"Options":[],"errors":["Can`t left options list empty","Can`t insert empty value."],
"Errors":["Can`t left options list empty","Can`t insert empty value."]},
"errors":[],"Errors":[]},

{"ShowHide":false,"Id":"3da9cbc0-9db8-4297-8245-351caaec9f08",
 "Name":"Menu-2","CourseName":"course-2","Sequence":"2",
 "CourseOptions":{"MenuId":"3da9cbc0-9db8-4297-8245-351caaec9f08",
 "Options":[],"errors":["Can`t left options list empty","Can`t insert empty value."],
 "Errors":["Can`t left options list empty","Can`t insert empty value."]},
 "errors":[],"Errors":[]}
] 
4

1 に答える 1

0

ノックアウト オブザーバブルは単純なフィールドではなく、関数です。関数は JSON.stringify によって処理されません。toJSON メソッドを追加してカスタム シリアライザーを指定することで、デフォルトの文字列化動作をオーバーライドします (これは JSON.stringify によって呼び出されます)。

これをモデルに追加してみてください:

self.toJSON = function()  {
   var result = {};
   result.Name  = ko.utils.unwrapObservable(self.Name);
   ...
   /// you could either iterate over the fields with `for .. in`
   return result;
}
于 2012-10-25T10:43:06.250 に答える