リモートモーダルダイアログがあり、ロードされると、モーダルに関するいくつかの情報を含む新しいモデルが作成されます。
var modalModel = {
SessionId: viewModel.SessionId(),
RetCols: ko.observableArray([])
};
$('#UploadModal').ajaxComplete(function (event, request, settings) {
ko.applyBindings(modalModel, $('#zupload')[0]);
});
これはうまくいきます。セッションIDをモーダルに出力しているので、情報があり、モデルがfirebugに表示されていることがわかります。ただし、ajax 呼び出しを行い、応答を observableArray RetCols に読み込む次の関数があります。これは、ページに長さを印刷していて、アイテムがあることを示しているため、機能しているように見えますが、私の人生ではそれをforeachすることはできません。ここに何か問題がありますか?ajax 呼び出しは次のとおりです。
function uploadSubmit() {
$.ajax({
url: '/Upload/UserSaveFileInfo/',
type: 'post',
async: false,
data: ko.toJSON({
UploadName: $("#uploadName").val(),
UploadDescription: $("#uploadDescription").val(),
Id: $('#uploadId').val()
}),
contentType: 'application/json',
success: function (result) {
for (var i = 0; i < result.length; i++)
{
modalModel.RetCols.push({
Id: result[i].Id,
Header: result[i].Header,
Values: result[i].Values,
MatchedTo: result[i].MatchedTo,
ColumnNumber: result[i].ColumnNumber
});
}
alert(modalModel.RetCols().length);
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(data);
}
});
}
そして、ここに動作したくない私のモーダルのビットがあります:
<span data-bind="text: modalModel.RetCols().length"></span> <!-- this works! -->
<!-- ko foreach: modalModel.RetCols -->
<div class="control-group" >
<label class="control-label">
Column <span data-bind="text: $data.ColumnNumber"></span>
</label>
<div class="controls">
<input data-bind="value: $data.MatchedTo" />
<span class="help-block" data-bind="text: $data.Values"></span>
</div>
</div>
<!-- /ko -->
どんな助けでも大歓迎です!! ここにフィドルがあります:http://jsfiddle.net/ZLBpu/154/モーダルのリモートロードのため、上記の説明とは少し異なりますが、起こっていることを多かれ少なかれ複製しました。
編集:特に、moveToModal の ajax 呼び出しが、これを爆破させているようです。このフィドルには ajax 呼び出しではなく同じ機能があり、期待どおりに動作します: http://jsfiddle.net/valvemail/RJ8Vx/1/ 。したがって、特に ajax 呼び出しに何か問題があるはずです。