2015-04-16 5 views
20

Ich versuche eine einfache modale Komponente in Ember zu bauen, aber es scheint die "Logik-weniger" von Lenker ist zu unlogisch für mich. Gibt es irgendeinen vernünftigen Weg, um etwas zu erreichen?Sane Möglichkeit, String und Variable in Handlebars.js Hilfsargument zu concat zu geben?

<h2>Nice block about {{title}}</h2> 
<a href="#" data-toggle="modal" id="add-item-{{title}}"> {{!this works}} 

{{#my-modal modal-id="add-item-{{title}}" header='New {{title}}'}} {{! those don't}} 
    <p>My body blabla</p> 
{{/my-modal}} 

Zur Zeit habe ich am Ende, indem sie meine modalen id sein "add-item-{{title}}" wahrsten Sinne des Wortes als auch die modale Titel auf.

Und ... Nein, für jetzt überlege ich nicht, den "Titel" als neuen Parameter zu übergeben und ihn im Modal zu verwenden. Der modale Header in einer anderen Vorlage ist möglicherweise nicht "New {{title}}", aber "Bist du sicher?" oder "Details über {{title}}".

+1

Das ist, wie Sie es tun sollen, oder erstellen Sie eine berechnete Eigenschaft im Rahmen, die verkettet und baut die Zeichenfolge in der Steuerung oder Komponente – Kingpin2k

+2

Eine letzte Sache, {{} } innerhalb {{}} werden nicht unterstützt – Kingpin2k

+1

offensichtlich werden sie nicht unterstützt! das ist genau mein Problem :(Wie interpoliert man Variablen in einem Lenkerargument? – igorsantos07

Antwort

41

Was Sie suchen, ist die concat helper. Mit ihm würde Ihr zweites Beispiel werden:

{{#my-modal modal-id=(concat 'add-item-' title) header=(concat 'New ' title)}} 
    <p>My body blabla</p> 
{{/my-modal}} 
+1

zur Zeit der Frage, die dieser Helfer nicht existierte :) thx – igorsantos07

+2

Wow! das ist sehr nützlich. Hatte keine Ahnung, dass es existiert. Vielen Dank! – Sarus

+0

Danke, das hat mir geholfen, die Hintergrund-URL richtig zu setzen .... https://gist.github.com/Artistan/8ee82f6753dca632ca3307917b4e6034 – Artistan

0

Ja, pass auf den Titel ist, wie ich es mache. Wenn Sie etwas zu dem Titel hinzufügen müssen, die mehr ist als nur model.title, dann stopfen eine berechnete Eigenschaft auf dem Controller (es6 String Interpolation Syntax):

Controller

modalHeader: function() { 
    return `New ${this.get('model.title')}`; 
    }.property('model.title') 

Vorlage

{{#my-modal header=modalHeader}} 
    <p>My body blabla</p> 
{{/my-modal}} 

Wie für die ID können Sie einige lustige Sachen in der Komponente zu überschreiben, siehe this codepen, aber ich weiß es nicht wie es mit Glut zusammenhängt. Warum willst du trotzdem eine ID für ein Modal setzen?

+0

über die ID: Ich habe es im Beispiel umbenannt. Die Idee ist, die modale interne ID auf etwas zu setzen, auf das wir uns eindeutig beziehen können, also ich kann das Modal durch jQuery oder Bootstrap eigenes Verhalten öffnen/schließen – igorsantos07

+0

das Problem über den modalen Header ist: verschiedene Modale haben völlig unterschiedliche Titel.Es wird nicht funktionieren, wenn ich eine berechnete Eigenschaft im Modal selbst einrichten muss: die komplette Header muss von außen kommen – igorsantos07

+0

yep, das ist, warum die 'modalHeader' berechnete Eigenschaft auf dem Controller ist –