Ich habe eine Kendo-Listview mit einer Vorlage, die die Elemente basierend auf den zugrunde liegenden Daten bedingt ausblendet. Ein Beispiel wäre wie folgt:Kendo ui Listenansicht Fokus verlieren, wenn Daten geändert werden
<script type="text/x-kendo-template" id="template">
<div class="product">
<img src="../content/web/foods/#= ProductID #.jpg" alt="#: ProductName # image" />
<h3>#:ProductName#</h3>
<p>#:kendo.toString(UnitPrice, "c")#</p>
<div>
# if (Discontinued) { #
Discontinued Product
# } #
</div>
</div>
</script>
Wenn ich die zugrunde liegenden Datasource Elemente ändern, um Set mit dem folgenden Code eingestellt:
data[index].set('Discontinued', true);
Wenn der Index die aktuell ausgewählte Element ist dann das Element den Fokus verliert und ist nicht mehr ausgewählt.
Sehen Sie sich das folgende Dojo-Beispiel http://dojo.telerik.com/UlOze an, wählen Sie einen Eintrag aus der Liste aus und setzen Sie ihn auf Discontinued.
Hat jemand eine Lösung/Workaround für dieses Problem gefunden?
Danke.
------------- ENDLÖSUNG --------------
Nach von dimodi Antwort auf unter ich die Lösung zusammengestückelt .. Damit dies funktioniert, muss die Eigenschaft dataSource die Eigenschaft schema -> model -> id haben.
1.e Erfassung des aktuell ausgewählte Datenelement:
var selectedItem = $(listElement).find(".k-state-selected");
var selectedDataItem = list.dataItem(selectedItem);
2. Platz: Nach dem Aufruf das Datenelement .set wieder zu finden und die k-State-ausgewählte Klasse. Dies ist erforderlich, da die Listenkomponente die UIDs neu generiert.
if (selectedDataItem) {
var newSelectedItem = list.dataSource.get(selectedDataItem.ProductID)
var uid = newSelectedItem.uid;
jQuery("[data-uid='" + uid + "']").addClass("k-state-selected");
}
Ich habe das Original Dojo aktualisiert, um diese Lösung zu zeigen, falls es jemand anderem hilft.
Ich kann nicht scheinen, dass diese Lösung funktioniert, wenn die zugrunde liegenden Daten geändert werden, funktioniert die addClass nicht, aber wenn nichts geändert wird, dann funktioniert es. Ich habe versucht, mit einem setTimeout zu sehen, ob das hilft, aber keine Freude. Musstest du noch etwas tun, um das zu machen? – ciantrius
Vergeben Sie den obigen Kommentar. Ich habe gerade bemerkt, dass die Listview die UIDs der Datenquellenelemente neu generiert. Ich habe den Code korrigiert, um damit fertig zu werden und es funktioniert jetzt. – ciantrius