2015-07-02 13 views
8

Ich würde gerne wissen, wenn es möglich ist, eine Variable mit einer anderen Zeichenfolge zu contrastieren, wenn eine partielle Verwendung Lenker geladen wird.Lenker - Concat String-Parameter beim Aufruf von Teil

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

Ich möchte id+"something" verketten und in id speichern, die an der Vorlage gesendet werden würde.

Ich bin mit einem benutzerdefinierten Helfer partials (partial), die mit den durch Lenker versehen options.hashthis verschmelzen zu laden.

Antwort

7

Es gibt einen Weg tatsächlich. Ich habe es mit Default-Partial Loader ">" probiert, aber ich hoffe es sollte auch mit "Partial" funktionieren.

Sie können einen Helfer wie diese

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

schreiben und wie

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

Ich nenne hoffen, das hilft.

+0

Noch brauchen Sie eine Hilfsfunktion zu verwenden, aber das macht die Arbeit. Danke für diesen Hinweis mit Klammern! – Vadorequest

+0

Gut zu wissen, dass es funktioniert hat, sind Sie willkommen :) – Hasanavi

1

Nein, das ist nicht möglich. Verwenden Sie die Verkettung in Ihrem Helfer.

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

Sie könnten eine etwas wiederverwendbare Lösung tun wie so:

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

es dann rufen Sie wie folgt:

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

oder

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

Der Grund für die Looping rückwärts in Der Helfer ist, weil Lenker derzeit seine Hash-Parameter vom letzten bis zum ersten von der Reihenfolge auflistet, in der Sie sie deklarieren.

+0

Interessant. Aber ich verstehe nicht, warum du 'module.exports' anstelle von labels helper verwendest, was bedeutet, dass du die Datei irgendwie laden musst. – Vadorequest

+1

Ahh sorry, ich bin mit vorkompilierte Grunzen Lenker (https://github.com/patrickkettner/grunt-compile-handlebars), die die gleiche Art und Weise funktioniert, aber verarbeitet ur Lenker offline dann statische HTML für die Ausgabe erstellt. Ich nehme an, es funktioniert auf die gleiche Weise für Lenker behandelt Client-Seite, der Parameter Json könnte etwas anders sein, aber die Idee wird gleich sein. Oh, und der Name des Helfers kommt direkt aus dem Dateinamen, wenn du es so machst, falls du verwirrt bist, also hat concat.js den obigen Code. –

9

Hier ist ein einfacher Weg. Ein Helfer namens 'concat':

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

Um verwendet werden, wie:

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

Hier ist eine ES6 Version: '(... args) => args.slice (0, -1) .join ('')' –

+0

Viel besser als meine Antwort +1 –

1

Versuchen folgen. Link Helfer ist mein eigener Helfer für das Hinzufügen von Kontextpfad /us

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

Dann habe ich so genannt.Meine url mit Welpen

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

Dann endlich bekam ich eine Ausgabe wie diese /us/Welpen

0

Wenn Sie eine einfache a + b Verkettung tust und du bist einschließlich bereits handlebars-helpers, Sie kann verwenden, um die add Helfer:

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

In ES6 ist dies möglich mit diesen Helfern: concat : (...strs) => strs.join('')

Sie auch Parameter durch Lenker gegeben überspringen mögen, das ist: concat : (...strs) => strs.filter(arg => typeof arg !== 'object').join('')

Verwandte Themen