无法将值传递给Handlebars registerHelpers

Not able to pass the values to Handlebars registerHelpers

本文关键字:Handlebars registerHelpers 值传      更新时间:2023-09-26

这是我的模板,

<script type="text/x-handlebars" >  
    Welcome {{name}}, <a href="#">Click here to {{checkStatus status}}</a>
</script>

我的应用程序.js,

App = Ember.Application.create();
App.ApplicationRoute = Ember.Route.extend({
    model: function() {
    return {
        name: "jack",
        status: "leaving"
    };
}
});

我有一个Handlebars registerHelper,

Handlebars.registerHelper( "checkStatus", function ( status ){ 
    if (status == "leaving" )
    {
        return 'leave';
    }
    else
    {
        return 'stay'; 
    }
}); 

但我的结果是

Welcome jack, Click here to stay

我不知道registerHelper为什么总是返回"stay"。我的预期输出是

Welcome jack, Click here to leave

给定到jsbin的链接:http://emberjs.jsbin.com/tekoli/1/edit

这是因为registerHelper checkStatus将下一个参数作为字符串。由于您正在传递"status",因此它总是采用else条件。

如果你可以把这些对象放在一个数组中,那么你可以做以下事情:

{{#each item in model}}
  {{CheckStatus item.status}}
{{/each}}

编辑:在对这个话题进行了一些研究之后,我找到了一个解决方案,我想在这里补充一下。

有一个Ember.registerBoundHelper,它将所有相关数据作为最终参数传递给函数。

请将您的注册助手更新为:

Ember.Handlebars.registerBoundHelper( "checkStatus", function ( status ){ 
if (status == "leaving" )
{
    return 'leave';
}
else
{
    return 'stay';
}
});

希望这对你有帮助。感谢

你可以做:

Welcome {{name}}, <a href="#">Click here to {{checkStatus status=status}}</a>

Handlebars.registerHelper( "checkStatus", function ( ){ 
  if (this.get('status') == "leaving" )
  {
      return 'leave';
  }
  else
  {
      return 'stay';
  }
});

接缝工作。