将对象文字传递给把手部分

时间:2016-04-01 15:55:59

标签: javascript handlebars.js webpack

是否可以在车把模板中执行以下操作?

{{> myPartial {name: 'steve', age: '40'} }}

这会在{上引发解析错误。传递上下文或命名参数我很好。

docs

  

通过将上下文传递给部分调用,可以在自定义上下文中执行部分。   {{> myPartial myOtherContext }}

我正在使用webpackhandlebars-loader来渲染我的模板,而且我实际上没有任何地方可以在上下文中传递。我只是想在多个模板中使用这个部分并在那时指定数据。

2 个答案:

答案 0 :(得分:4)

与此回复相关:https://github.com/wycats/handlebars.js/issues/476您无法在Handlebars模板上分配新变量,您必须在模板数据上创建此对象{name: 'steve', age: '40'}

data.user = {name: 'steve', age: '40'}

on .hbs

{{> myPartial user}}

但您可以查看private variableshttp://handlebarsjs.com/block_helpers.html

---- 2017年8月更新----

使用新的let块帮助程序指令,您可以创建HTML变量以更轻松地操作显示逻辑:

全球JS

// Create a new Global helper, available everywhere
Template.registerHelper('getUser', function () {
  return Meteor.user()
})

Blaze HTML

使用您的全局帮助程序将用户检索到变量并将其用于HTML

{{#let user=getUser}}
  {{#if user}}
    Hi {{user.name}}
  {{else}}
    Please Login
  {{/if}}
{{/let}}

----更新2019年----

让我重新开启这个问题并将其提升到新的水平。

通过注册新的简单助手,您将能够直接从Blaze创建对象或数组(所以你想要的一切):

Template.registerHelper('object', function({hash}) {
  return hash;
})
Template.registerHelper('array', function() {
  return Array.from(arguments).slice(0, arguments.length-1)
})

用法:

{{> myPartial (object name="steve" age=40 array_example=(array true 2 "3"))}}

将作为上下文发送:

 {
   name: 'steve', 
   age: 40,
   array_example: [true, 2, "3"] 
 }

答案 1 :(得分:0)

注册一个助手(即上下文)以解析您要传递的上下文:

方法如下:https://jsfiddle.net/dregep/o4p1g8nL/11/

Handlebars.registerHelper('context', function (jsString) {
    return eval("context=" + jsString);
});

然后这样称呼它:

{{> myPartial (context 'js object') }}

示例:

{{> myPartial (context '{a: 1}') }}

这等效于:

{{> myPartial a=1 }}