【问题标题】:Pass object literal to handlebars partial将对象文字传递给车把部分
【发布时间】:2016-07-21 12:27:39
【问题描述】:

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

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

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

docs:

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

我正在使用webpackhandlebars-loader 来呈现我的模板,我真的没有任何地方可以在上下文中传递。我只是想在多个模板中使用这个部分并指定当时的数据。

【问题讨论】:

  • A 添加了最近的更新以防万一

标签: javascript handlebars.js webpack


【解决方案1】:

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

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

在 .hbs 上

{{> myPartial user}}

不过你可以看看private variables:http://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"] 
 }

【讨论】:

  • 在 2019 年更新中,为什么要在从参数创建数组后对数组进行切片?不是复制数组两次吗?
  • 原来车把发送了一个额外的参数,所以你要删除它。尽管我认为在性能方面,最好将其保存在变量中并删除最后一个元素,而不是再次复制除最后一个之外的所有元素
  • 感谢您的回答帮了大忙!
【解决方案2】:

注册一个帮助器(即上下文)来解析你想要传递的上下文:

方法如下: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 }}

【讨论】:

  • 当我来这里更新我的信息时,我阅读了您的回答,您应该看看我的两个新助手(objectarray),他们可能会感兴趣。 eval 太过分了
猜你喜欢
  • 1970-01-01
  • 2013-11-17
  • 1970-01-01
  • 2020-07-21
  • 2014-06-24
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
相关资源
最近更新 更多