0

私は、KnockoutJS の POC を行う任務を負っており、私には理解できない問題に直面しています。

Ajax を使用してサービスからデータを取得し、フォームに ko.mapping.fromJS() を入力したいと考えています。ajax 呼び出しの成功関数内からマッピングを呼び出すと、フォームにデータが取り込まれません。成功の外に移動すると、正常に動作します。

更新:ロード関数がjsfiddleで呼び出されることは知っています(そこにアラートを入れると発火します)が、フォームにデータが入力されません..

http://jsfiddle.net/Ud9ex/6/

var planDesignData = {
        RecordID: '1124',
        Name: "Main"            
    };


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

//*** As soon as I move this line inside the sucess the input doesn't get populated 
self.planDesign = ko.mapping.fromJS(planDesignData);

self.load = function () {
    $.ajax({
        type: "POST",
        url: "/echo/json/",
        contentType: "application/json; charset=utf-8",
        dataType: "json",                    
        success: function (data) {                       
            var loadedPD = {};

            //I want to run the mapping here

        }
    });
}
}


$(document).ready(function () {
            var viewModel = new PlanDesignModel();
            viewModel.load();
            ko.applyBindings(viewModel);    

        });

どんな助けでも大歓迎です。

4

1 に答える 1

-2

ここに例があります

にデータを送信するだけです/echo/json

deferこの例では次のことを行いました。

$(document).ready(function () {
    var viewModel = new PlanDesignModel();
    $.when(viewModel.load).always(function(){
        ko.applyBindings(viewModel);
    });
});

しかし、すべてうまくいきます:

success: function (data) {
            var loadedPD = {};
            console.log(data);
            self.planDesign = ko.mapping.fromJS(planDesignData);
            //I want to run the mapping here

        }

注、私は1秒の遅延を入れました:

data: {
            json: JSON.stringify({
                RecordID: '1124',
                Name: "Main"
            }),
            delay: 1
        },
于 2013-11-10T16:10:49.577 に答える