2015-04-16 11 views
20

Sto cercando di creare un semplice componente modale in Ember, ma sembra che il "logico" di Handlebars sia troppo illogico per me. C'è qualche modo sano per ottenere un risultato in qualche modo questo?Sano modo di concatizzare la stringa e la variabile nell'argomento helper di Handlebars.js?

<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}} 

Attualmente mi finiscono per ottenere il mio id modale essendo "add-item-{{title}}", letteralmente, così come il titolo modale.

E ... no, per ora non sto considerando di passare il "titolo" come nuovo parametro e usarlo nel modale. L'intestazione modale in un altro modello potrebbe non essere "Nuovo {{titolo}}" ma "sei sicuro?" o "dettagli su {{title}}".

+1

è così che si dovrebbe fare, o creare una proprietà calcolata nel campo di applicazione che concatena e si accumula la stringa nel controller o il componente – Kingpin2k

+2

Un'ultima cosa, {{} } entro {{}} non sono supportati – Kingpin2k

+1

ovviamente non sono supportati! questo è esattamente il mio problema :(come interpolare le variabili in un argomento manubri? – igorsantos07

risposta

41

Quello che stai cercando è il concat helper. Con esso, il tuo secondo esempio diventerebbe:

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

al momento della domanda questo helper non esisteva :) thx – igorsantos07

+2

Wow! questo è super utile. Non avevo idea che esistesse. Grazie! – Sarus

+0

Grazie per avermi aiutato a impostare correttamente l'URL di background .... https://gist.github.com/Artistan/8ee82f6753dca632ca3307917b4e6034 – Artistan

0

Sì, passare il titolo è come lo faccio. Se avete bisogno di aggiungere qualcosa per il titolo che è più di un semplice model.title, poi farcire una proprietà calcolata sul controller (ES6 stringa di interpolazione sintassi):

regolatore

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

modello

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

Per quanto riguarda l'ID, puoi fare alcune cose divertenti nel componente per sovrascriverlo, vedi this codepen, ma non so come fa casino con la brace. Perché vuoi impostare un id per un modal comunque?

+0

sull'id: l'ho rinominato nell'esempio. l'idea è di impostare l'ID interno modale su qualcosa che possiamo chiaramente fare riferimento al di fuori di esso, quindi può aprire/chiudere la modal tramite i comportamenti propri di jQuery o Bootstrap. – igorsantos07

+0

il problema dell'intestazione modale è: le diverse modal avranno titoli completamente diversi e non funzionerà se devo configurare una proprietà calcolata nella modale stessa: il completo l'intestazione deve provenire dall'esterno – igorsantos07

+0

sì, ecco perché la proprietà calcolata di 'modalHeader' si trova sul controller –

Problemi correlati