2013-01-11 6 views
7

Ich frage mich, ob der registerBoundHelper in Ember jemals in der Lage war, mit den Blockstyle-Helfern umzugehen. Zum Beispiel habe ich die folgenden:Ember gebundener Blockhelfer

Ember.Handlebars.registerBoundHelper('unlessUndefined', (context, options) -> 
    unless typeof context == "undefined" 
    return options.fn(this) 
    else 
    return options.inverse(this) 
) 

Die Idee, es als solches zu verwenden sein:

{{#unlessUndefined choice}} 
    {{#if choice}} 
    <p>You chose yes</p> 
    {{else}} 
    <p>You chose no</p> 
    {{/if}} 
{{else}} 
    <p>Make a choice</p> 
{{/unlessUndefined}} 

Die option.fn (diese) Teile der Dinge scheinen keine Ausgabe zu machen. Wenn ich dies tue, erhalte ich einen Fehler in der Konsole: "Sie können appendChild nicht außerhalb des Renderprozesses verwenden"

Wenn dies nicht möglich ist, kann vielleicht jemand einen anderen Weg vorschlagen, um einen bedingten Block zu erreichen nur anzeigen, wenn der gebundene Wert nicht undefiniert ist?

Antwort

4

Ich habe gerade eine Menge Zeit damit verbracht, dies zu bekämpfen und eine Art von Fehler gefunden. Ich habe die Pull-Anfrage mit der Implementierung der Methode registerBoundHelper betrachtet.

Ich habe die folgende oberhalb dieser Linie: https://github.com/emberjs/ember.js/pull/1274/files#L0R357

Ember.run.scheduleOnce('render', view, 'rerender') 

Es ist wie die boundHelper Methode sieht wickelt nur die ursprüngliche Hilfsmethode und erstellt eine anonyme Ansicht. Das einzige Problem ist, dass der Beobachter die anonyme Ansicht in den Render-Modus versetzt, ohne die ursprüngliche Ansicht in die erste zu setzen.

Zumindest geht es mir so. Wie auch immer, es funktioniert jetzt für mich. Vielleicht ist das ein Fehler?

+1

Hallo Paul. Vielen Dank, dass Sie diese Informationen veröffentlicht haben. Ich führe gerade die Master-Version von Ember, so dass ich Ihre Lösung nicht in die Praxis umsetzen konnte. Ich denke jedoch, dass Sie Recht haben, wenn die ursprüngliche Ansicht nicht neu gerendert wird. Mit den Änderungen, die sie vorgenommen haben, ist es nicht so einfach wie das Hinzufügen der Zeile, die Sie erwähnen, da sie den Render innerhalb einer Funktion ausführen und der Kontext dieser Funktion keinen Zugriff auf die ursprüngliche Ansicht hat. Es lohnt sich, einen Fehler zu öffnen, sobald ich das Verhalten eingrenzen kann. –

+0

gibt es schon ein Problem? –

+0

gefunden keine, geöffnet eins: https://github.com/emberjs/ember.js/issues/2237 –

Verwandte Themen