UPDATE:Here is a link to reproduce the problemКендо UI: Один источник данных, два виджета
СВЯЗАННЫЕ:This is another question of mine where similar problems are happening with Kendo UI Map, maybe it could help someone figure this one out! Он имеет один недостаток и один рабочий вариант.
Я использую Кендо UI в DataSource, DropDownList и карты в угловом применении одной страницы.
Я хочу использовать тот же объект DataSource как для DropDownList, так и для Map. Однако Карта ведет себя очень непредсказуемым образом.
- Когда я поставил DropDownList перед тем карты в шаблоне, только DropDownList их получает. Проверка сетевого трафика показывает, что действительно выполняется только один запрос. Когда я помещаю карту сначала, они оба заполняются и делаются два запроса.
- Когда я не буду использовать какие-либо обещания в
transport.read
, но просто позвонитеoptions.success
сразу со статическим значением, все работает как ожидалось. Делаются два звонка.
Я тянул за волосы весь этот рабочий день, поэтому любая помощь высоко ценится.
Источник данных службы:
m.factory('ourDataSource', function(foo, bar, baz) {
return new kendo.data.DataSource({
transport: {
read: function(options) {
foo().then(function (result) {
return bar(result);
}).then(function (result) {
return baz(result);
}).then(function (result) {
options.success(result);
}).catch(function (err) {
options.error(err);
});
}
}
});
});
Контроллер:
m.controller('ourController', ['ourDataSource', function(ourDataSource) {
// set the data source of the dropdownlist
this.ourDataSource = ourDataSource;
// set up the map layers
this.mapLayers = [{
type: 'tile',
urlTemplate: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/#= zoom #/#= y #/#= x #',
}, {
type: 'marker',
dataSource: ourDataSource, // the same data source as before
locationField: 'Position',
titleField: 'Title'
}];
}]);
Вид:
<div ng-controller="ourController as ctrl">
<select kendo-drop-down-list
k-data-text-field="'Title'"
k-data-value-field="'Title'"
k-data-source="ctrl.ourDataSource"></select>
<div kendo-map
k-zoom="2"
k-center="[1, 1]"
k-layers="ctrl.mapLayers">
</div>
</div>
Что я здесь отсутствует?
Но вы _don't want_ два запроса на чтение. Это общий источник данных, поэтому почему вы хотите, чтобы он дважды запрашивал одни и те же данные? Что касается того, почему это не является обязательным для данных, нам, вероятно, нужен публичный пример, который дублирует это поведение. Трудно вывести как есть. – Brett
@Brett: Действительно, я не хочу два запроса, но даже когда я отключу autoBind и вызов 'fetch' вручную, результат будет таким же. Я чувствовал, что было бы легче выяснить, могу ли я уменьшить тестовый пример до максимально возможного. Я посмотрю, могу ли я создать публичный пример. – damd
Не может быть, потому что 'ourDataSource' является фабрикой, которая возвращает объект __new__ datasource? Попробуйте вернуть его в виде сингла. – Brett