Javascript Emberjs没有处理此操作
错误:未捕获错误:没有处理“rollDice”操作。如果确实处理了该操作,则此错误可能是由于从控制器中的操作处理程序返回true而导致该操作冒泡 我确保控制器中的方法与操作具有相同的名称。 HTML部分Javascript Emberjs没有处理此操作,javascript,ember.js,dom-events,action,Javascript,Ember.js,Dom Events,Action,错误:未捕获错误:没有处理“rollDice”操作。如果确实处理了该操作,则此错误可能是由于从控制器中的操作处理程序返回true而导致该操作冒泡 我确保控制器中的方法与操作具有相同的名称。 HTML部分 <script type="text/x-handlebars"> {{outlet}} </script> <script type="text/x-handlebars" id=&quo
<script type="text/x-handlebars">
{{outlet}}
</script>
<script type="text/x-handlebars" id="index">
{{#linkTo "roll"}}Lets roll dice!{{/linkTo}}
</script>
<script type="text/x-handlebars" id="roll">
<p class="centerme">A Dice Roller.</p>
<p> </p>
<p>Click to play!<br/>
<button id="play" {{action 'rollDice'}}>Roll Dice</button>
</p>
<section id="roll-wrap">Dice stuff</section>
<script>
路由
DiceRoller.Router.map(function() {
this.resource("roll");
});
DiceRoller.IndexRoute = Ember.Route.extend({
redirect: function(){
this.transitionTo("roll");
}
});
DiceRoller.DiceRoute = Ember.Route.extend({
model: function() {
return this.store.find('Dice');
}
});
型号
DiceRoller.Dice = DS.Model.extend({
rotateXvalue: DS.attr('string'),
rotateYvalue: DS.attr('string')
});
DiceRoller.Dice.FIXTURES = [
{
rotateXvalue: '40deg',
rotateYvalue: '37deg'
}
];
My JS bin,到目前为止,它在设置对象代理的内容时给了我一个错误。您错误地命名了控制器。滚动路线的正确控制器应为
dicerroll.RollController
在RollController
中,您应该在roleDice
操作中获得模型,而不需要属性列表。这是用于计算属性,而不是操作
DiceRoller.RollController = Ember.ObjectController.extend({
actions: {
rollDice: function () {
var diceModel = this.get('model');
var x=[270,1080,1440,810];
var rand1=Math.floor(Math.random()*4);
var rand2=Math.floor(Math.random()*4);
diceModel.set('rotateXvalue',x[rand1]+"deg");
diceModel.set('rotateYvalue',x[rand2]+"deg");
diceModel.save();
}
}
});
退房
您需要创建模型记录,以便能够在管线中对其设置值,如下所示:
DiceRoller.RollRoute = Ember.ObjectController.extend({
model:function() {
return this.store.createRecord('dice');
}
});
import Ember from 'ember';
export default Ember.Controller.extend({
isBody: false,
actions: {
toggleBody() {
console.log("Look at me go!");
this.toggleProperty('isBody');
}
}
});
我刚接触Ember.js,也很挣扎,但对我来说,将
操作:{…}
从控制器移动到路由:
DiceRoller.DiceRoute = Ember.Route.extend({
model: function() {
return this.store.find('Dice');
},
actions: {...} // move actions here
});
或使用应用程序控制器
而不是滚动控制器
:
DiceRoller.ApplicationController = Ember.ObjectController.extend({
var diceModel = this.get('model');
actions: {
rollDice: function () {
var x=[270,1080,1440,810];
var rand1=Math.floor(Math.random()*4);
var rand2=Math.floor(Math.random()*4);
diceModel.set('rotateXvalue',x[rand1]+"deg");
diceModel.set('rotateYvalue',x[rand2]+"deg");
diceModel.save();
}.property('diceModel.rotateXvalue','diceModel.rotateYvalue')
}
});
不说这是正确的方法!只是说它对我有用-还在学习;-) 当您遵循Ember官方教程并进入模板->操作章节时,您可能会在第一个示例中遇到此错误,因为此示例使用了稍后解释的组件。我尝试将动作添加到模板/about.hbs中,并使用动作处理程序创建组件/about.js,但这两个组件无法协同工作。我猜诀窍是在模板/组件/中定义hbs文件,但在此之前,我通过创建 controllers/about.js如下所示:
DiceRoller.RollRoute = Ember.ObjectController.extend({
model:function() {
return this.store.createRecord('dice');
}
});
import Ember from 'ember';
export default Ember.Controller.extend({
isBody: false,
actions: {
toggleBody() {
console.log("Look at me go!");
this.toggleProperty('isBody');
}
}
});
这是EmberCli环境,v2.0.0,他们说控制器和组件很快就会合并成一个东西,所以…我已经编辑了控制器的名称,但操作仍然没有被处理。我想没有指定路线,但我找不到。我已经更新了答案,尝试一下,看看是否有效。我已经添加了我使用的模板。好的,我明白了没有财产清单的原因。我想让控制器创建一个新的rotateXvalue、rotateYvalue值,并将其保存到模型中,以便更新骰子。您在哪里创建骰子模型?我签出了jsBin,并将RollController中的代码替换为console.log(“Stuff”)。我想发生的是我的包含RollController的文件没有被正确引用。你有一个带有
{{outlet}}
的应用程序模板吗?另外,我认为路由器中的DiceRoute是找到模型的东西?因为你使用的是/#/roll,您的路线将是RollRoute
,而您的控制器将是RollController
。您仍然可以将骰子模型用于此路由,如下面的示例所示。我已将router.js中的骰子路由更改为RollRoute。我使用夹具适配器为我的模型创建了一个记录。它之所以有效,是因为记录的值提供了呈现骰子所需的CSS值。我只是无法让动作事件正常工作,即更改模型中的值以使骰子滚动。