0

ノックアウトマッピングの使用に問題があります。

私はFormBuilderViewModelを持っており、データのロードと保存を含む一連の関数が含まれています。最初の行(self = thisの後)は次のとおりです。

this.form = ko.mapping.fromJS({blueprint_identifier: undefined, name: undefined, description: undefined, pages : []})

'this.form'を3つのメタ変数と1つの配列で初期化します。

次に、データをロードします(これもFormBuilderViewModelにあります)。

ko.mapping.fromJSON(allData, {}, self.form);

変数allDataはAJAXリクエストから取得され、正確に次のものが含まれます。 {"blueprint_identifier":1347437911,"name":"test","description":"test","pages":[]}

問題は、ロードされたJSONが私のページに表示されないことです。データをロードした後の出力console.log(this.form)は空です。スクリプト全体は次のとおりです(関数などを除く)。

var FormBuilderViewModel = function(data){
    var self = this;

    this.form = ko.mapping.fromJS({
                   blueprint_identifier: undefined, 
                   name: undefined, 
                   description: undefined, 
                   pages : []
                })

    $.getJSON("x", function(allData) {
        if(){
            console.log("I'm here");
            ko.mapping.fromJSON(allData, {}, self.form);
        }else{
            // not relevant
        }
    });
    console.log(self.form); 
};

出力は「I'mhere」(ロードポイントに到達)、次に空の「form」オブジェクトです。

ここで何が欠けていますか?

4

2 に答える 2

0

$.getJSON関数が機能するasyncので、呼び出したときにconsole.log(self.form)マッピングが終了していません。コンソール出力でオブジェクトを表示するには、ログ操作を成功関数に移動します。

$.getJSON("x", function(allData) {
    if(){
        console.log("I'm here");
        ko.mapping.fromJSON(allData, {}, self.form);
        console.log(self.form);
    }else{
        // not relevant
    }
});

は期待どおりの文字列ではないため、ko.mapping.fromJS代わりに使用してみてください。ko.mapping.fromJSONallDatafromJSON

$.getJSON("x", function(allData) {
    if(){
        console.log("I'm here");
        ko.mapping.fromJS(allData, {}, self.form);
        console.log(self.form);
    }else{
        // not relevant
    }
});
于 2012-09-12T10:02:26.440 に答える
0

これがあなたが探していることをする機能的なフィドルです:

http://jsfiddle.net/jearles/Cm4xS/

空のオブザーバブルでフォームを初期化し、AJAX呼び出しが戻ったときにそれをロードします。バインディングを使用することによりwith、フォームがロードされるまでフォームを表示しようとはしません。

于 2012-09-12T10:21:35.060 に答える