Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js:用视图替换简单的指向帮助器的链接_Ember.js_Handlebars.js - Fatal编程技术网

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));
    })
...
});