同じページに複数の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;
}