それを考え出しました。私はobservableArray内のオブジェクトを追跡し、オブジェクト自体の内部データを操作する必要がないので、observablesを削除することになりました。
$.ajax({
url: "http://en.wikipedia.org/w/api.php?action=opensearch&search=" + marker.title + "&callback=wikiCallBack",
dataType: 'jsonp',
success: function(response) {
// TODO figure out why ko array isnt updating
// articleList is just an array is strings
var articleList = response[1];
var tempArray = [];
if (articleList.length < 1) {
tempArray.push({
title: "No articles found",
url: "#"
});
} else {
for (var i = 0; i < articleList.length; i++) {
articleStr = articleList[i];
tempArray.push({
title: articleStr,
url: "http://en.wikipedia.org/wiki/" + articleStr
});
}
}
tempArray.push({
title: "Courtesy of Wikipedia API",
url: "https://www.mediawiki.org/wiki/API:Main_page"
});
// Clear wikiData array's contents by redefining with new content
self.wikiData.removeAll();
tempArray.forEach(function(item) {
self.wikiData.push(item);
});
// Push wiki attribution regardless of whether articles were found
//clearTimeout(wikiRequestTimeout);
if (self.isWikiMenuVisible() === false) {
self.clickHamburgerWiki();
}
}
});
HTMLは同じとどまっ:ここでは他のすべてです。
KOにアップデートを認識させる方法は、observableArrayを空の配列に再割り当てするのではなく、observableArrayを空にして新しいオブジェクトをpushするためにremoveAll()関数を使うことでした。これは、再割り当てによって以前に設定されたバインディングが削除され、removeAll()によってそれらが残されているため意味があります。