私はKnockout.jsを初めて使用しており、WebAPI呼び出しからデータをバインドするために使用しています。 私は、getData()メソッドが無限ループで呼び出されていた、不満足なシナリオを持っていました。デバッグ後、私はconsole.log(self.activityLogs())をコメントアウトすると、それがなくなったことが分かりました。 getDataメソッドの中に置いておくと、ループの問題は発生しません。knockout.js viewmodelがループしてWebAPIを呼び出す
誰もがここで何が起こっているのか、なぜこの無限ループが起こったのか説明できますか?
$(function() {
var ActivityLogViewModel = function() {
self = this;
self.activityLogs = ko.observableArray([]); //data
getData();
console.log(self.activityLogs()); // when this is here, it goes into infinite loop
function getData() {
$.ajax({
type: "GET",
url: "/api/EnvironmentsApi/activityLogs",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
console.log(data);
self.activityLogs(data);
console.log(self.activityLogs());
},
error: function (error) {
alert(error.status + "<--and--> " + error.statusText);
}
});
}
return {
self: self
}
};
ko.applyBindings(ActivityLogViewModel);
});
ないこれが関連しているが、ここで私はHTMLのテーブルでそれを結合された方法であれば確認してください。
<tbody data-bind="foreach: activityLogs">
<tr>
<td>b...</td>
</tr>
</tbody>
'ko.applyBindings(新しいActivityLogViewModel);' – haim770
使用 'self.activityLogs.peek()'データを読み込みます。それ以外の場合は、依存関係を作成し、Knockoutは 'ActivityLogViewModel'関数全体を再評価し、無限ループを引き起こします。 – haim770