2016-07-29 25 views
0

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.

Antwort

2

Wenn ein Datenelement geändert wird, wird das entsprechende ListView-Element erneut gerendert, um die Änderungen zu übernehmen. Daher ist die Auswahl verloren, da es sich um ein rein visuelles Feature handelt, das nicht für alle Rebinds beibehalten wird. Sie können prüfen, ob ein Artikel ausgewählt wurde, bevor Sie set() verwenden und dann die Auswahl manuell wiederherstellen, indem Sie eine k-state-selected-Klasse anschließend auf das Element anwenden.

+0

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

+0

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