Ember.js:用视图替换简单的指向帮助器的链接
我有一个内置了基本功能的应用程序。我不打算浏览和添加其他功能。在这种情况下,我需要将当前使用Ember.js:用视图替换简单的指向帮助器的链接,ember.js,handlebars.js,Ember.js,Handlebars.js,我有一个内置了基本功能的应用程序。我不打算浏览和添加其他功能。在这种情况下,我需要将当前使用linkTo的简单按钮转换为视图。问题是,我不知道如何将一个链接转换为另一个链接,并且仍然保持链接的完整性 如何进行此转换?以下是我现在掌握的代码: <script type="text/x-handlebars" data-template-name="accountItem"> {{#each account in controller}} {{#linkTo "account"
linkTo
的简单按钮转换为视图。问题是,我不知道如何将一个链接转换为另一个链接,并且仍然保持链接的完整性
如何进行此转换?以下是我现在掌握的代码:
<script type="text/x-handlebars" data-template-name="accountItem">
{{#each account in controller}}
{{#linkTo "account" account}}
<img {{bindAttr src="account.icon"}} />
{{/linkTo}}
{{/each}}
</script>
将当前代码转换为视图时,如何模拟linkTo提供的功能?您可以在把手模板中为
帐户定义属性绑定。
此绑定的工作原理如下:
<script type="text/x-handlebars">
<h1>App</h1>
{{#each item in controller}}
{{#view App.AccountView accountBinding="item"}}
<a {{bindAttr href="view.account.url"}} target="_blank">
{{view.account.name}}
</a>
{{/view}}
{{/each}}
</script>
<script type="text/x-handlebars" data-template-name="menu-item">
<a {{action gotoRoute item on="click" target="view.parentView"}}>
{{item.displayText}}
</a>
</script>
<script type="text/x-handlebars" data-template-name="navbar">
<ul class="left">
{{#each item in controller}}
{{view view.MenuItemView itemBinding="item"}}
{{/each}}
</ul>
</script>
工作小提琴:
作为对更新1的响应:
我发现自己处于一个类似的场景中,并最终创建了一个子视图来模拟{{linkTo}
助手。我真的不知道/认为这是最好的实现方法。
您可以在此处看到我以前的代码:
当时我在应用程序视图中创建了一个子视图
:
App.ApplicationView = Em.View.extend({
templateName: 'application',
NavbarView: Em.View.extend({
init: function() {
this._super();
this.set('controller', this.get('parentView.controller').controllerFor('navbar'))
},
selectedRouteName: 'home',
gotoRoute: function(e) {
this.set('selectedRouteName', e.routeName);
this.get('controller.target.router').transitionTo(e.routePath);
},
templateName: 'navbar',
MenuItemView: Em.View.extend({
templateName:'menu-item',
tagName: 'li',
classNameBindings: 'IsActive:active'.w(),
IsActive: function() {
return this.get('item.routeName') === this.get('parentView.selectedRouteName');
}.property('item', 'parentView.selectedRouteName')
})
})
});
我的把手是这样的:
<script type="text/x-handlebars">
<h1>App</h1>
{{#each item in controller}}
{{#view App.AccountView accountBinding="item"}}
<a {{bindAttr href="view.account.url"}} target="_blank">
{{view.account.name}}
</a>
{{/view}}
{{/each}}
</script>
<script type="text/x-handlebars" data-template-name="menu-item">
<a {{action gotoRoute item on="click" target="view.parentView"}}>
{{item.displayText}}
</a>
</script>
<script type="text/x-handlebars" data-template-name="navbar">
<ul class="left">
{{#each item in controller}}
{{view view.MenuItemView itemBinding="item"}}
{{/each}}
</ul>
</script>
所以我想,从那里你可以理解它是如何工作的,并自己实现一些东西。让我知道这是否有帮助。这已经开始变得更有意义,但它仍然没有解决我如何获得链接的问题……可能是因为我没有提供足够的前期信息。你介意看一下更新1吗?
<script type="text/x-handlebars" data-template-name="menu-item">
<a {{action gotoRoute item on="click" target="view.parentView"}}>
{{item.displayText}}
</a>
</script>
<script type="text/x-handlebars" data-template-name="navbar">
<ul class="left">
{{#each item in controller}}
{{view view.MenuItemView itemBinding="item"}}
{{/each}}
</ul>
</script>
var LinkView = Em.View.extend({
...
attributeBindings: ['href', 'title'],
...
href: Ember.computed(function() {
var router = this.get('router');
return router.generate.apply(router, args(this, router));
})
...
});