【问题标题】:EmberJS: Nothing handled the actionEmberJS:没有处理该动作
【发布时间】:2019-06-23 00:05:30
【问题描述】:

Ember 新手。使用 2.3.0。对于现有的应用程序,我需要添加一个用于在屏幕上切换内容的按钮。按照现有的代码模式,我添加了以下两个文件。

app/components/help.js

import Ember from 'ember';

export default Ember.Component.extend({
    actions: {
      toggleHelp() {
          this.toggleProperty('isShowingHelp');
      }
    }
});

模板/组件/help.hbs

<div class="help">
    <a href="#" {{action "toggleHelp"}}>help</a>
</div>
{{#if this.isShowingHelp}}
  <p>HELPHELPHELP</p>
{{/if}}

然后在各种 *.hbs 文件中添加{{partial "components/help"}} 以使按钮显示在需要的位置。

按钮按预期呈现

<div class="help">
    <a href="#" data-ember-action="493">help</a>
</div>

但是当我点击时,我得到错误,“没有处理动作'toggleHelp'。如果你确实处理了动作,这个错误可能是由于从控制器中的动作处理程序返回true,导致动作冒泡。”

我检查了Ember documentation,发现它与说明相符。

我认为问题可能是因为我将其称为partial,但其他选项(viewrenderoutlet)似乎都不适用于我的有限情况。

根据this answer,我尝试了{{action "toggleHelp" target='component'}},但是当我单击时出现错误,“ember.debug.js:29112 Uncaught TypeError: Cannot read property 'send' of undefined.”

我完全不知所措...谁能指出我在这里遗漏了什么?谢谢!

更新

如果我将toggleHelp 与其中一个 .hbs 文件一起复制到控制器中,则链接可以正常工作。但肯定正确的方法不能是把它放在多个控制器文件中吗? (当我尝试将 toggleHelp 放入 controllers/application.js 中时,希望它能覆盖所有地方(?!),我又回到了原来的错误。)

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    你的问题确实是{{partial "components/help"}}

    一般来说,你不应该使用部分。要调用组件,请使用 {{component-name}}

    但是,Ember 2.3 中的组件需要在其名称中包含 -。所以help 无效有效!

    将您的组件重命名为my-help 之类的名称。所以app/components/my-help.js 为你的js 和templates/components/my-help.hbs。然后你就可以通过{{my-help}} 来使用该组件。

    【讨论】:

    • 啊。我曾经尝试过{{help}},但没有奏效。在无数年的时间里,我永远不会想出那个连字符的东西。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多