- Если вы определили что-то как
self.data
, вы не сможете позже получить к нему доступ, просто позвонив data
. Поэтому вам нужно изменить свою последнюю строку на:
self.datasource = ko.observableArray(self.data);
- Даже если вы сделаете это, вы получите эту ошибку:
Аргумент, передаваемый при инициализации наблюдаемого массива, должен быть массивом, либо нулевым, либо неопределенным.
То есть вы не можете передать наблюдаемый массив в наблюдаемый массив. self.data
должен быть просто обычным массивом JS.
self.data = [];
Но обычный массив JS не генерирует никаких событий при изменении его значений, поэтому вам придется снова обновить observableArray datasource
. Ваш полный код может быть таким:
function myPieChartModel() {
var self = this;
self.data = [];
self.datasource = ko.observableArray(self.data);
$.getJSON("https://restcountries.eu/rest/v2/all").
then(function(countries) {
$.each(countries, function() {
self.data.push({
name: this.name,
population: this.population
});
});
self.datasource(self.data);
});
}
return myPieChartModel;
Дайте мне знать, если это работает. У меня есть ощущение, что ваши данные JSON также необходимо будет изменить следующим образом:
self.data.push({name: this.name,
items: [this.population]
});
Почему? Потому что именно так Oracle ожидает JET. Вот документация .