Я пытаюсь отобразить список элементов в таблице с помощью Knockout JS. Это похоже на типичный интерфейс поиска, где пользователь вводит запрос, а интерфейс отображает список результатов, возвращаемых поисковой системой. Сначала я извлекаю их с сервера через вызов AJAX, а затем пытаюсь связать их. Это очень удобно для первого запроса. Но когда я пытаюсь выполнить второй запрос (и последующие запросы), каждый результирующий элемент представляется в 10 раз (дублируется), затем для третьего запроса каждый элемент отображается как 30 раз (и так далее). Ниже приведен код.Ajax-запросы с нокаутом JS
<body >
<p>
<input type="search" id="skynet-query" name="q" placeholder="scientific search" autofocus />
<input type="submit" id="skynet-submit" value="Ignite!" onclick="getAttachments(document.getElementById('skynet-query').value)" />
</p>
<article data-bind="foreach: seats">
<h3>
<input data-bind="attr:{value: papers().id }" type="checkbox" name="article-to-basket" />
<a data-bind="attr:{href: papers().url }, text: papers().title"> </a>
</h3>
<address class="authors" data-bind="text: papers().authors"/>
</article>
</body>
Ниже приводится часть сценария
<script>
var array = new Array();
function getAttachments(keyword) {
var request = $.ajax({
type: "GET",
datatype: "json",
url: "get-papers?q="+keyword+"&format=json&full-articles=true&kw-count=10&article-count=10&task-type=m1"
});
request.done(function (response) {
for (i=0;i<response.articles.length; i++){
array[i] = new PaperData(response.articles[i]);
}
ko.cleanNode(document);
ko.applyBindings(new ReservationsViewModel());
console.log("DONE");
});
}
function PaperData(papers) {
var self = this;
self.papers = ko.observable(papers);
}
function ReservationsViewModel() {
//var self = this;
self.seats = ko.observableArray(array);
}
</script>
Может кто-то помочь мне найти то, что случилось с этим кодом?
Это то, что мои данные-модель выглядит
{
articles: [
{
"is-saved": false,
title: "title",
abstract: "Abstract",
date: "2005-01-01 00:00:00",
"publication-forum": "forum",
"publication-forum-type": "article",
authors: "Authors",
keywords: "keyword1, keyword2, keywordn",
id: "4f5a318e573ce53e03000015"
}
]
}
Фактически в 3-й раз каждый элемент отображался 45 раз :(Очень странно, и я не могу понять, почему – Paba
Ваш 'массив' является« глобальным », и вы всегда добавляете элементы, и вы никогда его не очищаете. – nemesv
Откуда возникают «сиденья»? Ваша модель просмотра кажется неполной. – Tomalak