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}}