如何在 ember 中从另一个助手调用 Handlebars block 助手。
我有兴趣在绑定(bind)助手中转换以下内容。
{{#each link in sideMenuLinks}}
<li class="navigation page">
{{#linkTo ROUTE_VARIABLE link.linkToRouteContext}}
{{{link.iconTag}}}<i class="icon-right-open"></i>{{link.linkText}}</a>
{{/linkTo}}
</li>
{{/each}}
请注意,我必须在帮助程序中调用 {{#linkTo}} block ,并使用属性 link.linkToRoute 中的值更改 ROUTE_VARIABLE。
最佳答案
Ember Handlebars 助手位于 Ember.Handlebars.helpers
.您可以调用Ember.Handlebars.helpers.{helperName}.call
联系他们.
但是,上面看起来像一个动态的部分/ View 样式助手。我建议为它创建一个 Handlebars View 助手。语法类似,但您将 View 类传递给 helper
.
Ember.Handlebars.helper('sideMenuLinks', App.SideMenuLinksView);
通过给出
templateName
,相应的 View 可以使用类似于您的模板。 App.SideMenuLinksView = Ember.View.extend({
templateName: 'sideMenuLinksTemplate'
});
你的模板会是这样的,
<script type='text/x-handlebars' data-template-name='sideMenuLinksTemplate'>
{{#each link in view.links}}
<li class="navigation page">
{{#linkFor parentView.routeVariable link.linkToRouteContext}}
{{{link.iconTag}}}<i class="icon-right-open"></i>{{link.linkText}}</a>
{{/linkFor}}
</li>
{{/each}}
</script>
默认 Ember
linkTo
是静态的,因为您不能从变量传递命名路由。您将需要一个动态的 linkTo
像 linkFor
这样的助手之前查找变量路径申请
linkTo
内部。 Ember.Handlebars.registerHelper('linkFor', function(path, params, options) {
var view = options.data.view;
var name = view.get(path);
var args = [name, params, options];
return Ember.Handlebars.helpers.linkTo.apply(this, args);
});
最后你可以像下面这样使用这个助手。
links
属性将绑定(bind)到 content
本例中的 Controller 。 <script type='text/x-handlebars' data-template-name='application'>
{{sideMenuLinks links=content routeVariable='page'}}
</script>
这是一个有效的jsbin .
关于ember.js - 从另一个助手调用 Handlebars block 助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17532878/