2012-04-05 6 views
0

Ich habe eine ziemlich einfache Backbone-Ansicht, die ich einige Blöcke von HTML bedingt haben möchte. Ich sehe ein Verhalten, bei dem nach dem bedingt gerenderten HTML-Code auch eine ganze Zahl gerendert wird. Von dem, was ich sagen kann, scheint es zu passieren, wenn ich die end Anweisung verwende, um einen bedingten Block zu beenden.Eco Vorlage rendert Ganzzahl bei Verwendung von 'Ende' Anweisung

Hier ist ein Code, der den Fehler für mich demonstriert:

<% if true: %>Hello World!<% end %> 

Ich würde erwarten, dass dieses Hello World! in das Aufnahmeelement zu machen. Es wird jedoch tatsächlich Hello World!2 gerendert.

Wenn ich mehrere Blöcke in der gleichen Vorlage hinzufügen:

<% if true: %>Foo, <% end %> 
<% if true: %>Bar, <% end %> 
<% if true: %>Baz<% end %> 

Ich würde erwarten, dass dieses Foo, Bar, Baz in das Aufnahmeelement zu machen. Es wird jedoch tatsächlich Foo, 2 Bar, 5 Baz8 gerendert. Nach dem Ausführen einer etwas größeren Menge von ihnen scheint es, dass die ganze Zahl, die gedruckt wird, jedes Mal um 3 erhöht wird. Vom Lesen über die README des Edelsteins kann ich nichts sehen, was ich falsch mache.

Jede Hilfe wäre sehr willkommen!

+0

Übergeben Sie ein Variablenende mit einem Wert an die Vorlage? Es könnte die Standard-Endfunktionalität irgendwie überschreiben. – abraham

+0

In diesem Fall wäre das Rendering-Objekt (eine Backbone-Ansicht) das einzige, was im Template-Bereich wäre. Es wird kein zusätzlicher Kontext außer dem übergeben. Das sagte ... vielleicht "Ende" im Kontext der Backbone View ist eine Hilfsfunktion oder etwas? Ich werde das untersuchen. –

+0

Konnte keine Ursache in diesem Pfad finden. Am Ende habe ich meine App wieder auf JavaScript und die Vorlagen auf EJS umgestellt. Nicht das Ergebnis, nach dem ich gesucht habe, aber zumindest funktioniert es. –

Antwort

0

Alternativ können Sie das Postfix-Format verwenden.

<%= "Hello World!" if true %> 
+1

Ja, das funktioniert definitiv für Dinge, die ich in einer einzigen Zeile ausdrücken kann; aber ich würde in einigen Fällen die Fähigkeit benötigen, Blöcke zu machen. Danke für den Vorschlag! –

0

Ich habe das gleiche Problem. Hast du es schon gelöst?

Ich denke, es wird durch verursacht, wenn Anweisungen in __obj.push() Aufrufe in der kompilierten JS eingewickelt wird. Zum Beispiel in meinem Skript, es ist ein Stück Code

<%- if [email protected]: %> 
    <%- to_html(@create_link('c', @session['course'])) %> 
<%- end %> 

, den

[1] __out.push(!this.blok ? 
[2] (__out.push('\n '), 
[3] __out.push(to_html(this.create_link('c', this.session['course']))), 
[4] __out.push('\n ') 
[5] ) : void 0) 

kompiliert wird, wenn ich es richtig verstehen, bedeutet dies, dass es zuerst die \n schieben, das Ergebnis die Funktion, ein weiterer \n an den Ausgang. Aber die letzte push (Zeile 4) wird die Anzahl der Elemente im Array zurückgeben, die wiederum durch die äußere push (Zeile 1) an das Array selbst gedrückt werden.

Ich habe versucht, die Array.prototype.push zu ändern, etwas anderes zurückzugeben, aber es scheint, dass Dinge noch mehr vermasselt (da es eine Kernfunktion ist).

+1

Die Installation von Node.js hat das Problem gelöst. – phoeniks

+0

Wie hat es das Problem gelöst und warumyyyyy ?! Dinge wie diese machen mich verrückt. –

Verwandte Themen