1

同じページに複数のviewModelが表示されることになります。そのため、ajax呼び出しを実行するために、viewModelを変数として関数に渡す方法を理解しようとしています。このスパンを更新しようとしています:

<span data-bind="text: AnswerText"/></span> <span data-bind="text: GetFormattedDate() "/></span>

このコードのチャンクは機能し、GetFormattedDateからの値が正しく入力されます。

var viewModel1;
$(document).ready(function () {
    var jsonDataToSend = { questionConfigurationID: 1 };
    $.ajax({
        url: "SomePage.aspx/GetAnswerAndComments",
        type: "post",
        dataType: "text json",
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify(jsonDataToSend),
        success: function (msg) {
            var result = msg.d;
            if (result != null) {
               viewModel1 = ko.mapping.toJS(result);
                ko.applyBindings(viewModel1, document.getElementById("divAnswerAndComment1"));
            }
        }
    });

});


function GetFormattedDate()
{
    var date = "";
    if (viewModel1.InsertDate != null) 
    {
        date = new Date(parseInt(viewModel1.InsertDate.substr(6)))
    } 
    return date;
} 

しかし、$ document.ready関数を別の関数の呼び出しに置き換えたとき、GetFormattedDateが呼び出されたときにviewModelを変数として渡すと、viewModel1は未定義です(以下を参照)。viewModel1のスコープと関係があると確信していますが、問題が何であるかを正確に把握することはできません。

var viewModel1;
$(document).ready(function () {
GetAnswersAndComments(1, viewModel1);
});


function GetAnswersAndComments(questionID, currentViewModel) {
    var jsonDataToSend = { questionConfigurationID: questionID };
    $.ajax({
        url: "ControlWebMethods.aspx/GetAnswerAndComments",
        type: "post",
        dataType: "text json",
        contentType: "application/json; charset=utf-8",
        data: JSON.stringify(jsonDataToSend),
        success: function (msg) {
            var result = msg.d;
            if (result != null) {
                currentViewModel = ko.mapping.toJS(result);
                ko.applyBindings(currentViewModel);
            }
        }
    });        
}

function GetFormattedDate()
{
    var date = "";
    if (viewModel1.InsertDate != null) 
    {
        date = new Date(parseInt(viewModel1.InsertDate.substr(6)))
    } 
    return date;
} 
4

1 に答える 1

0

あなたはに渡しviewModel1ていGetAnswersAndCommentsます。関数内には、への参照のローカルコピーviewModel1があり、このローカルコピーはと呼ばれcurrentViewModelます。

次に、そのローカル変数を。で設定しますcurrentViewModel = ko.mapping.toJS(result);。これは触れないviewModel1ので、未定義のままです。基本的なJavascript

于 2012-07-13T04:37:33.223 に答える