6

在 EmberJS 的最新版本之后,v1.9.0我试图从 Handlebars 转移到 HTMLbars。我发现非常具有挑战性的是缺乏文档。

我正在尝试实现非常简单的助手。

例如拿这个车把助手:

HTML

<div id="main"></div>

<script type="text/x-handlebars" data-template-name="index">
    {{logIt test}}
    <h1>{{test}}</h1>
</script>

JS

App = Ember.Application.create({
    rootElement: '#main'
});

    App.IndexRoute = Ember.Route.extend({
        setupController: function(controller){
            controller.set('test', 'mytest');
        }
    });

    Ember.Handlebars.registerHelper("logIt", function(something) {
        console.log(something);
    });

Js 小提琴:http: //jsfiddle.net/sisir/p463q2L8/

如何将其转换为 htmlbars?

4

4 回答 4

4

从 Ember 1.10.0 开始,这个问题通过做Ember.HTMLBars.makeBoundHelper(theHelperFunction).

编辑:自 Ember 1.13.6(2015 年 7 月 31 日)以来,使用它被标记为已弃用。

弃用:不推荐使用 Ember.HTMLBars._registerHelper。助手(甚至是无破折号的)会自动解析。[弃用 id:ember-htmlbars.register-helper]

于 2015-03-10T10:07:14.160 回答
4

从 Ember 1.13 开始,有两个 API:http ://emberjs.com/blog/2015/06/12/ember-1-13-0-released.html#toc_new-ember-js-helper-api

现在最简单和更常见的语法是这样的:

export default Ember.Helper.helper(function(params, hash) {
  return params.join(' ');
});

Helpers 接收两个参数:params 是传递给 helper 的有序参数,hash 包含键值选项,例如 title="Mr."。

于 2015-07-20T21:45:28.160 回答
1

我相信您可以使用Ember.Handlebars.helper,这是最新的emberjs 指南中的内容。这个jsbin使用 htmlbars 并且可以工作。这是jsbin中的助手

AppLogItHelper = Ember.Handlebars.helper("logIt", function(something){
  console.log(something);
});

如果您使用的是ember-cli,它会自动为您生成一个,但它使用Ember.Handlebars.makeBoundHelper,它在 jsbin 中不起作用,但在我的 ember-cli 应用程序中起作用。

于 2015-02-21T21:31:22.583 回答
0

一个非常重要的新奇之处在于HTMLBars 有子表达式!由于 Ember 1.10+ 已切换到 HTMLBars,因此您应该改用 Ember.HTMLBars.makeBoundHelper Ember.Handlebars.registerHelper。但是你仍然可以Ember.Handlebars.registerHelper从 Ember 1.10.1 版本开始使用

新的方法:

App.XEqHelper = Ember.HTMLBars.makeBoundHelper(function(params, hash, options, env) {
    return params[0] === params[1];
    });

它从模板调用为:

{{#if (x-eq order 'delivery_order')}}
    Need a delivery
{{/if}}
于 2015-07-30T21:14:55.127 回答