我是Ember初学者,使用2.3.0。在现有的应用程序中,我需要添加一个按钮来切换屏幕上的内容。按照现有的代码模式,我添加了以下两个文件。
app/components/help.js
import Ember from 'ember';
export default Ember.Component.extend({
actions: {
toggleHelp() {
this.toggleProperty('isShowingHelp');
}
}
});
templates/components/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>
但是当我点击时,我得到了错误,“Nothing handed the action 'toggleHelp'。如果您确实处理了该操作,则该错误可能是由于从控制器中的操作处理程序返回true,从而导致操作冒泡。
我检查了Ember documentation,看到这符合说明。
我认为问题可能是因为我把它称为partial
,但其他选项(view
,render
,outlet
)似乎都不适用于我有限的情况。
按照this answer,我尝试了{{action "toggleHelp" target='component'}}
,但是当我点击的时候,错误变成了“ember.debug.js:29112 Uncaught TypeError:无法读取未定义的属性“send”。”
我错过了什么?
更新
如果我将toggleHelp
和.hbs文件沿着复制到控制器中,那么链接可以正常工作。但是正确的方法肯定不是把它放在多个控制器文件中吧?(当我试图将toggleHelp
放在controllers/application.js中时,希望它能覆盖所有地方(?!),我回到了原来的错误。)
1条答案
按热度按时间9q78igpj1#
你的问题确实是
{{partial "components/help"}}
!一般来说,你不应该使用偏句。要调用组件,请使用
{{component-name}}
。但是Ember 2.3中的组件需要在其名称中包含
-
。所以help
* 无效!将组件重命名为
my-help
。所以app/components/my-help.js
用于你的js和templates/components/my-help.hbs
。然后,您可以使用{{my-help}}
来使用该组件。