ArcGIS Server JS API zawiera nową klasę FeatureTable , która pokazuje tabelę atrybutów odpowiadającą FeatureLayer. Istnieje opcja syncSelection, która:
Umożliwia interakcję między mapą a tabelą obiektów. Ustawienie tej właściwości na true umożliwia wybór elementu na mapie poprzez kliknięcie wiersza w tabeli i wybranie rzędu tabeli poprzez kliknięcie elementu na mapie
Nie wydaje się to jednak honorować zestawu selekcji dokonanego programowo względem warstwy.
Biorąc próbkę na https://developers.arcgis.com/javascript/3/sandbox/sandbox.html?sample=featuretable , jeśli zastosuję zaznaczenie do FeatureLayer, nie zostanie to odzwierciedlone w FeatureTable:
// Create the feature layer
myFeatureLayer = new FeatureLayer("https://services.arcgis.com/V6ZHFr6zdgNZuVG0/arcgis/rest/services/Warren_College_Trees/FeatureServer/0", {
mode: FeatureLayer.MODE_SELECTION,
visible: true,
outFields: ["*"],
id: "fLayer"
});
var myQuery = new Query();
myQuery.where = "Spp_Code ='SABA'";
myFeatureLayer.selectFeatures(myQuery,FeatureLayer.SELECTION_NEW)
To poprawnie stosuje zaznaczenie do warstwy obiektów (zwróć uwagę, że mapa zawiera tylko jeden punkt), ale nie do tabeli obiektów (zawiera wszystkie 1146 punktów z zaznaczonym 0):
Czy istnieje sposób na odświeżenie tabeli funkcji, aby odzwierciedlić zestaw wyboru?
źródło
Odpowiedzi:
Począwszy od wersji 3.16 i późniejszych, implementacja tego
SyncSelection
logicznego parametru różni się nieco od tego, co opisałeś:Wiem, że to królewski ból, ale uważam, że musisz przejrzeć wybrane funkcje warstw mapy i wybrać je PONOWNIE, wywołując na nich zdarzenie kliknięcia zaznaczenia (programowo).
źródło
To jest moje rozwiązanie do przeglądania tylko tego, co jest widoczne na mapie (w widoku :)
...
źródło
Połącz się ze
selection-complete
zdarzeniem, użyjgetSelectedFeatures()
, zamapuj wynik na tablicę identyfikatorów i przekaż go zaFeatureTable
pośrednictwemselectRows
. Następnie dołączselectFeatures
doclick
wydarzenia i gotowe.Z grubsza pomysł:
źródło