我嘗試使用Knockout JS顯示錶中的項目列表。這就像一個典型的搜索界面,用戶鍵入查詢,界面顯示搜索引擎返回的結果列表。我首先通過AJAX調用從服務器檢索它們,然後嘗試綁定它們。這適用於第一個查詢。但是,當我嘗試第二個查詢(和後續查詢)時,每個結果項目被表示10次(重複),然後對於第三個查詢,每個項目顯示爲30次(依此類推)。以下是代碼。使用Knockout JS進行Ajax查詢
<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"
}
]
}
其實在第三次顯示每個項目45次:(非常奇怪,我不明白爲什麼 – Paba
你的'陣列'是「全局」,你總是添加項目,你永遠不會清除它.. – nemesv
'座位'從哪裏來?你的觀點模型似乎不完整。 – Tomalak