2013-07-10 4 views
7

So der Titel sagt so ziemlich alles. Ich versuche, das neue MultiSelect-Widget in die benutzerdefinierte Popup-Editor-Vorlage eines Rasters einzubinden.Kendo Grid mit benutzerdefinierten Popup-Editor mit MultiSelect - kann nicht ausgewählte Artikel in Modell

Ich verwende die Data Attribute Initialization-Methode und lese die Dropdown-Optionen von einer Remote-DataSource. Das funktioniert alles in Ordnung, aber ich kann die Werte der ausgewählten Objekte nicht in das Modell bringen.

Wenn ich die Zeile speichere, wird ein Array von Daten an den Server gesendet, der das erste im MultiSelect ausgewählte Datenelement darstellt, und nicht eine durch Kommas getrennte Liste ausgewählter Werte.

Irgendwelche Ideen, wie ich den MultiSelect-Wert (Liste/Array von ausgewählten Werten) in das Rastermodell bekommen kann?

Dank

Edit: Ich habe jetzt eine Abhilfe verwendet, aber ich würde ich interessiere es zu wissen, ob ein ‚richtiger Weg‘ MultiSelects mit Grids zu verwenden.

dieses Problem umgehen, um so etwas zu der Konfiguration des Grid hinzuzufügen:

save: function(e) { 
    e.model.items = $('#select_items').data("kendoMultiSelect").value(); 
} 

Dies ist der relevante Teil der Popup-Editor-Vorlage:

<input name="select_items" id="select_items" data-value-field="id" 
data-text-field="description" data-source="itemsDataSource" 
data-role="multiselect" data-auto-bind="false" data-item-template="itemList"> 

ich nicht select_items in der habe Modelldefinition: Ich verwende die obige Problemumgehung, um den Wert von MultiSelect in das Modell items zu kopieren. Das scheint zu funktionieren, ich weiß einfach nicht, warum es notwendig ist.

+1

Können Sie Ihren Editor Code in Ihrem OP enthalten? Es scheint mir, dass das Problem mit dem Editor ist und die Multiselect-Definition das Modell nicht aktualisiert. – OnaBai

+0

Hatte nur einen Gedanken ... könnte es etwas mit der Modelldefinition zu tun haben? Was sollte der Feldtyp für eine MultiSelect sein? Ich benutze 'string' ist das richtig? – Mat

+0

Intern ist es ein Array von Strings, aber wenn es angezeigt wird (die Eingabe) ist eine Serialisierung des Arrays und dann eine Zeichenfolge. Sie können die Karte in transport.create/transport.update verwenden, um sie in das zu konvertieren, was Sie auf dem Server benötigen (Sie können dies auch in ParameterMap tun (siehe DataSource-Dokumentation) – OnaBai

Antwort

13

Für MultiSelect in Grids mit gibt es ein paar o Fragen zu berücksichtigen:

  1. Grid-Editoren als Typ Unterstützung für Spalten string, boolean, number und date nur. Da Sie eine Reihe von ... speichern möchten, sagen wir string Sie müssen dies umgehen.
  2. Da Sie ein Array von Werten vom Server erhalten, müssen Sie template für die Serialisierung zu einem string verwenden, um vom Server empfangene Werte anzuzeigen.
  3. KendoUI kann nicht erraten, dass Sie einen MultiSelect als Eingabe verwenden möchten, so dass Sie die Funktion editor bereitstellen müssen.

Lassen Sie uns Arbeit um all diese Fragen:

Um die Frage der array von string zu lösen die einfachste Lösung ist nichts KendoUI sagen über das, was empfangen wird.

Für die template, werde ich die JavaScript join Methode verwenden, um alle Werte zusammen durch ein "," getrennt zu ziehen.Etwas wie:

{ field: "Cities", template: "#= Cities.join(', ') #" } 

schließlich für den Editor, die ich benutze:

{ field: "Cities", template: "#= Cities.join(', ') #", editor : citiesEditor } 

function citiesEditor(container, options) { 
    $("<select multiple='multiple' data-bind='value : Cities'/>").appendTo(container).kendoMultiSelect({ 
     dataSource: citiesDS 
    }); 
} 

Wo in meinem Fall citiesDS ist nur ein array von string mit dem Namen der gültigen Städte.

var citiesDS = [ 
    "Boston", "Kirkland", "London", "New York", "Philadelphia", "Redmond", "Seattle", "Tacoma" 
]; 

Wenn Sie Update (speichern), wird es an den Host ein array von Strings mit den Städten in Cities Feld eingeführt senden.

Beispiel: hier http://jsfiddle.net/OnaBai/Q2w7z/

+0

Vielen Dank . –

Verwandte Themen