2012-04-04 5 views
1

Ich habe einen Controller, der ein ArrayProxy ist und einige berechnete Arrays enthält.Wie man über jedes Element in einem berechneten Ember-Array in einer Lenkeransicht iteriert

In Coffeescript, mein Controller sieht aus wie so:

MyApp.parentController = Ember.ArrayProxy.create 
    content: [] 
    mothers: (-> 
    mothers = (person for person in @get("content") when person.sex == 0) 
).property("content") 
    fathers: (-> 
    fathers = (person for person in @get("content") when person.sex == 1) 
).property("content") 

Das funktioniert gut, und wenn ich ‚MyApp.parentController.get (‚Mütter‘)‘ fordern von der Kommandozeile bekomme ich wieder die erwartete Array .

Jetzt möchte ich diesen Satz in meinem Dokument anzuzeigen, und so möchte ich die Liste der Mütter iterieren:

<div id="parent-mothers-pool"> 
    {{#each MyApp.parentController.mothers}} 
    {{#view MyApp.ParentView contentBinding="this"}}{{/view}} 
    {{/each}} 
</div> 

Das funktioniert nicht, und in der Tat hängt vollständig die Anwendungen, für immer Spinnen und ohne sogar irgendwelche Fehler auf der Konsole zu drucken.

Wenn Sie ".mother" an der #Eingabeleiste ablegen, werden alle Eltern wie erwartet korrekt angezeigt. Aber es auf Borken zu setzen.

Wie iteriere ich über dieses berechnete Array?

Antwort

0

Sie sollten mothers Attribut eine Bindung in der ParentMothersPool Ansicht, indem er auf den Controller definieren:

MyApp.EnclosingView = Ember.View.extend 
    mothersBinding: 'MyApp.parentController.mothers' 

Dann in der Vorlage:

{{#each mothers}} 
    ... 
+1

ich in das aussehen wird. In der Zwischenzeit habe ich die Antwort auf die Iteration über eine berechnete Eigenschaft ausgearbeitet: Zuerst muss die Eigenschaft ** zwischengespeichert werden, indem .cacheable() hinzugefügt wird. Dadurch wird verhindert, dass die Anwendung hängenbleibt (und wird nirgendwo in der Dokumentation erwähnt, natch ...). Zweitens, nachdem die Eigenschaft als cachefähig markiert wurde, hört sie tatsächlich auf, so zu arbeiten, wie ich sie programmiert habe, weil die Eigenschaft jedes Element des Arrays beobachten sollte. Also die feste Syntax für die berechnete Eigenschaft ist 'Mütter: (...). Eigenschaft ("Inhalt. @ Jeder"). Cacheable()'. Dies behebt das Problem und die Ansicht funktioniert ordnungsgemäß. –

+0

Also, meine Antwort oben beiseite, ist das typische Muster, das Sie benutzerdefinierte Ansichten für jede beliebige Sammlung oder Untergruppe haben müssen, die Sie jemals haben möchten? Ich glaube, ich fange an, eine große Anzahl von Drei-Zeilen-Ansichten zu stapeln ... –

+0

In dieser Antwort nehmen wir an, dass Ihre einschließende Ansicht der Name nach dem div ist, das Sie in dieses Snippet aufgenommen haben. Offensichtlich sollte die "Mutter" -Bindung von der Ansicht auf der "jeden" Umfangsebene gehalten werden. Sie haben notwendigerweise eine Ansicht, die dieses div enthält. –

Verwandte Themen