UPDATE:Here is a link to reproduce the problemKendo UI: una fonte di dati, due widget
RELATIVA:This is another question of mine where similar problems are happening with Kendo UI Map, maybe it could help someone figure this one out! Ha una mancanza ed una versione di lavoro.
Io uso DataSource, DropDownList e Map dell'interfaccia utente di Kendo in un'applicazione angolare a pagina singola.
Desidero utilizzare lo stesso oggetto DataSource sia per DropDownList che per la mappa. Tuttavia, la mappa si comporta in modo molto imprevedibile.
- Quando ho messo la DropDownList prima mappa nel modello, solo il DropDownList ottiene popolata. L'ispezione del traffico di rete rivela che in effetti è stata fatta solo una richiesta. Quando metto per primo la mappa, entrambi vengono popolati e vengono fatte due richieste.
- Quando non utilizzo alcuna promessa in
transport.read
, ma si chiama semplicementeoptions.success
immediatamente con un valore statico, tutto funziona come previsto. Sono state fatte due chiamate.
Mi ci sono passato i capelli per tutta la giornata di lavoro, quindi qualsiasi aiuto è molto apprezzato.
Il servizio di origine dati:
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);
});
}
}
});
});
Il controllore:
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'
}];
}]);
La vista:
<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>
Che cosa mi manca qui?
Ma, si _don't want_ due richieste di lettura. È un'origine dati condivisa, quindi, perché vorresti che richieda gli stessi dati due volte? Per quanto riguarda il motivo per cui non è vincolante per i dati, probabilmente avremmo bisogno di un esempio pubblico che duplica questo comportamento. È difficile dedurre così com'è. – Brett
@Brett: In effetti, non desidero due richieste, ma anche quando disattivo autoBind e chiamo 'fetch' manualmente, il risultato è lo stesso. Sentivo che sarebbe stato più facile capire se riducevo il caso di test al modo più semplice possibile. Vedrò se riesco a creare un esempio pubblico. – damd
Potrebbe essere dovuto al fatto che 'ourDataSource' è una factory che sta restituendo un oggetto __new__ datasource? Prova a restituirlo come un singleton. – Brett