Handlebars - 调用partial时的Concat字符串参数

时间:2015-07-02 14:47:12

标签: javascript handlebars.js

我想知道在使用Handlebars加载部分时是否可以使用另一个字符串连接变量。

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

我想结束id+"something"并将其存储到id,然后将其发送到模板。

我正在使用自定义帮助程序加载部分partial),它将this与把手提供的options.hash合并。

7 个答案:

答案 0 :(得分:12)

这是一种更简单的方法。一个名为'concat'的助手:

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

用作:

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

答案 1 :(得分:11)

实际上有一种方法。我已尝试使用默认的部分加载程序">",但我希望它可以与" partial"太

你可以写一个像这样的帮手

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

并将其称为

set

我希望有所帮助。

答案 2 :(得分:4)

你可以做一个稍微更可重复的解决方案,如下:

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

然后这样称呼它:

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

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

在帮助器中向后循环的原因是因为把手当前从你声明它们的顺序列出了从最后到第一个的哈希参数。

答案 3 :(得分:1)

不,这是不可能的。在助手中使用连接。

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

答案 4 :(得分:1)

试试以下内容。 Link helper是我自己的助手,用于添加上下文路径 / us

<input type="submit" name="submit value="Submit" />

然后我这样打过电话。我的网址小狗

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

然后我最终获得了像 / us / puppies

这样的输出

答案 5 :(得分:0)

如果您正在进行简单的a + b连接并且已经包含handlebars-helpers,则可以使用add帮助程序:

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

答案 6 :(得分:0)

在ES6中,可以使用此帮助程序: concat : (...strs) => strs.join('')

您可能还想跳过Handlebars给出的参数,即: concat : (...strs) => strs.filter( arg => typeof arg !== 'object' ).join('')