2015-07-02 15 views
8

Vorrei sapere se è possibile concatenare una variabile con un'altra stringa quando si carica un partial utilizzando Handlebars.Manubri - Parametri della stringa Concat quando si chiama parziale

{{partial logos this ns=../ns nsr=../nsr id=id+"something"}} 

mi piacerebbe concat id+"something" e la memorizzazione in id, che sarebbe stato inviato al modello.

sto usando un aiutante personalizzato per caricare parziali (partial) che si fondono con l'thisoptions.hash fornito da manubrio.

risposta

7

C'è un modo in realtà. Ho provato con il caricatore parziale predefinito ">", ma spero che dovrebbe funzionare anche con "partial".

è possibile scrivere un aiuto come questo

Handlebars.registerHelper('concat', function(path) { 
    return "/etc/path" + path; 
}); 

e Chiamatela come

{{> responsive-image src=(concat '/img/item-tire.png') alt="logo" }} 

Mi auguro che aiuta.

+0

Ancora è necessario utilizzare una funzione di supporto, ma che fa il lavoro. Grazie per questo suggerimento con parentesi! – Vadorequest

+0

Buono a sapersi, ha funzionato, sei il benvenuto :) – Hasanavi

1

No, questo non è possibile. Usa la concatenazione all'interno del tuo aiutante.

{{partial logos this ns=../ns nsr=../nsr idKey=id idValue="something"}} 
4

Si potrebbe fare una soluzione un po 'più riutilizzabile in questo modo:

module.exports = function (json) { 
    var concat = ''; 
    var flipArray = []; 
    for(var key in json.hash){ 
    flipArray.push(json.hash[key]); 
    } 

    for(var i = (flipArray.length - 1); i >= 0; i--){ 
    concat += flipArray[i]; 
    } 

    return concat; 
}; 

Quindi chiamare in questo modo:

{{> icon name=(concat a="file-" b="pdf")}} // passes file-pdf to the partial under the hash value name 

o

{{concat a="icon-" b="pdf" c="-Asdfasd" d="zxcvzxcvzxcvxz"}} // outputs icon-pdf-Asdfasdzxcvzxcvzxcvxz 

Il motivo per il looping all'indietro l'helper è perché il manubrio attualmente elenca i suoi parametri hash dall'ultimo al primo dall'ordine in cui li dichiari.

+0

Interessante. Ma non capisco perché tu stia usando 'module.exports' invece di manubrio helper, il che significa che devi caricare il file in qualche modo. – Vadorequest

+1

Ahh scusate, sto usando manubri grunt precompilati (https://github.com/patrickkettner/grunt-compile-handlebars) che funziona allo stesso modo ma processa il manubrio offline quindi crea un html statico per l'output. Presumo che funzioni allo stesso modo per manubri gestiti lato client, il parametro json potrebbe essere leggermente diverso ma l'idea sarà la stessa. Oh e il nome dell'helper proviene direttamente dal nome del file quando lo fai in quel modo, nel caso in cui confuso, quindi concat.js ha il codice sopra. –

9

Ecco un modo più semplice. Un aiutante di nome 'concat':

module.exports = function(){ 
    var arg = Array.prototype.slice.call(arguments,0); 
    arg.pop(); 
    return arg.join(''); 
}; 

per essere usato come:

{{>myPartial id=(concat "foo" myVar myOtherVar)}} 
+3

Ecco una versione ES6: '(... args) => args.slice (0, -1) .join ('')' –

+0

Molto meglio della mia risposta +1 –

1

Prova a seguire. Collegamento helper è il mio aiuto per l'aggiunta di percorso del contesto /ci

Handlebars.registerHelper('link', function(option,parameter) { 
      return '/us' + option.hash.target; 
     }); 

Handlebars.registerHelper('concat', function() { 
      var outStr = ''; 
      for(var arg in arguments){ 
       if(typeof arguments[arg]!='object'){ 
        outStr += arguments[arg]; 
       } 
      } 
      return outStr; 
     }); 

Poi ho chiamato così.Il mio url hanno cuccioli

{{link target=(concat '/' url)}} 

Poi finalmente ho avuto output come questo /us/cuccioli

0

Se stai facendo una semplice concatenazione a + b e il gioco è già compreso handlebars-helpers, voi può utilizzare l'helper add:

{{> myPartial myVariable=(add someVariable "some string") }} 
0

In ES6 questo è possibile utilizzando questo helper: concat : (...strs) => strs.join('')

Si consiglia inoltre di saltare parametri indicati dal manubrio, che è: concat : (...strs) => strs.filter(arg => typeof arg !== 'object').join('')

Problemi correlati