Twitter bootstrap Ember.js:断言失败:名为';行动测试&x27;在(生成的myroute控制器)中找不到

Twitter bootstrap Ember.js:断言失败:名为';行动测试&x27;在(生成的myroute控制器)中找不到,twitter-bootstrap,ember.js,Twitter Bootstrap,Ember.js,我正在尝试使用的组件bs按钮分派一个简单的操作,该操作将在日志中写入一些内容。为此,我使用ember cli创建了一个新的应用程序,并根据 然后,我使用ember cli(ember g route myroute)创建了一个路由,并编写了以下代码: app/routes/myroute.js import Ember from 'ember'; export default Ember.Route.extend({ actions: { actionTest(value){

我正在尝试使用的组件
bs按钮
分派一个简单的操作,该操作将在日志中写入一些内容。为此,我使用
ember cli
创建了一个新的应用程序,并根据

然后,我使用ember cli(
ember g route myroute
)创建了一个路由,并编写了以下代码:

app/routes/myroute.js

import Ember from 'ember';

export default Ember.Route.extend({

  actions: {
    actionTest(value){
      console.log('on actionTest:', value);
    }
  }

});
app/templates/myroute.hbs

{{#bs-button onClick=(action "actionTest")}}Run test action{{/bs-button}}
但当我尝试访问时,控制台中出现以下错误(未呈现任何内容):

其次是:

Uncaught TypeError: Cannot read property 'getAttribute' of undefined
也许是一个完全愚蠢的错误,但我在文档和示例中都没有发现任何东西

环境:

余烬cli:

$ ember -v
ember-cli: 2.10.1
node: 6.9.2
os: darwin x64
chrome控制台:

DEBUG: -------------------------------
DEBUG: Ember      : 2.10.2
DEBUG: Ember Data : 2.11.3
DEBUG: jQuery     : 3.1.1
DEBUG: -------------------------------

我相信,按照设计,事件只会发送到相应的控制器或组件,如中所述(尽管没有明确说明)

因此,一种解决方案是创建一个
myroute
控制器(或者创建一个组件来封装行为),并在其中声明操作

否则,您可以包括以下内容,并通过以下方式实现您的行动:

{{#bs-button onClick=(route-action "actionTest")}}Run test action{{/bs-button}}

它无法在控制器内找到操作的原因,因为关闭操作将不会冒泡到路由及其上(父路由)

解决此问题的一种方法是使用
ember route action
,在调用该操作时更改目标


另一种方法是使用传统的
sendAction
方法(尽管不推荐),这会使操作调用在默认情况下冒泡。

Jup。令人困惑的是,闭包操作只能触发控制器,而上下文操作则会冒泡。是的,我就是这样。我在路径中定义了一个动作,但是由于动作发生在一个闭包中(A <代码> <代码>元素),所以我不得不将动作移到控制器。@罗杰的回答表示“余烬方式”来解决它,但我认为混淆是由于你在这里提出的原因而发生的:“原因是闭包动作不会出现在路线及以上”-也许它能帮助其他初学者。谢谢。
{{#bs-button onClick=(route-action "actionTest")}}Run test action{{/bs-button}}