灰烬新手。使用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
,但似乎没有其他选择(view
,render
,outlet
)适用在我有限的情况下。
根据this answer,我尝试了{{action "toggleHelp" target='component'}}
,但是随后我单击时的错误变成“ ember.debug.js:29112 Uncaught TypeError:无法读取未定义的属性'send'。”
我无所适从...有人能指出我在这里想念的东西吗?谢谢!
更新:
如果我将toggleHelp
与.hbs文件之一一起复制到控制器中,则该链接可以正常工作。但是确定正确的方法肯定不能将其放入多个控制器文件中吗? (并且当我尝试将toggleHelp
放在controllers / application.js中时,希望可以覆盖所有地方(?!),我回到了原来的错误。)
答案 0 :(得分: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}}
即可使用该组件。