2013-02-07 8 views
7

Ich benutze ember 1.0.0-pre4.Wo soll ich den Auswahlstatus für eine Liste behalten?

Ich möchte eine Liste von Model-Instanzen anzeigen. Der Benutzer sollte in der Lage sein, so viele Listeneinträge auszuwählen, als er auf eine Schaltfläche oder ein Kontrollkästchen klickt, das in jeder Zeile gerendert wird.

Ich konnte die Liste anzeigen. Aber ich weiß nicht, wie man den Auswahlstatus verwaltet. Wenn ich etwas wie {{view Ember.Checkbox checkedBinding="isSelected"}} in die Vorlage einfüge, wird der Auswahlstatus in meinem Modell gespeichert. Aber ich denke nicht, dass dies der beste Ort ist. Ich denke, der Auswahlstatus gehört zu dem Controller- oder Ansichtszustand.

Können Sie mir bitte die beste Möglichkeit zum Speichern und Zugriff (mehrere) Listenauswahlstatus sagen?

Antwort

8

Eine Möglichkeit ist, einfach eine zweite Liste in der Steuerung zu halten:

App.FooController = Ember.ArrayController.create({ 
    selectedContent: [], 
    selectToggle: function(event) { 
    var selectedContent; 
    selectedContent = this.get(selectedContent); 
    if (selectedContent.contains(event.context)) { 
     return this.set('selectedContent', selectedContent.without(event.context)); 
    } else { 
     return this.get('selectedContent').push(event.context); 
    } 
    } 
}); 

<script type="text/x-handlebars" data-template-name="index"> 
    <ul> 
    {{#each foo in controller}} 
      <li {{action selectToggle foo}}>{{foo.name}}</li> 
    {{/each}} 
    </ul> 
</script> 

Das ist nur eine separate Liste in der Steuerung verwaltet und schiebt/Entfernt basierend auf, ob das Element ausgewählt wurde.

Sie könnten auch ein Ember.ObjectProxy verwenden, um die Werte des foo-Objekts um eine "isSelected" -Eigenschaft zu erweitern.

Dann in Ihrer selectToggle -Methode setzen Sie einfach foos isSelected-Eigenschaft entsprechend.

+0

Vielen Dank, Andre. Das werde ich heute versuchen. Kannst du mir bitte auch sagen wie die Lösung mit Ember.ArrayProxy aussehen würde? Ich möchte alle Möglichkeiten in Ember kennen, um die richtige Lösung für diese und vielleicht zukünftige Probleme auswählen zu können. – Marc

+0

Können Sie mir bitte sagen, wie ich aus der Vorlage auf die selectedContent-Liste zugreifen kann, um beispielsweise die ausgewählten Zeilen mit einem anderen Stil zu rendern? – Marc

+0

Dazu müssen Sie die ObjectProxy-Methode verwenden. Ich habe die Antwort aktualisiert. –