错误:未捕获错误:没有处理动作'rollDice'。如果您确实处理了该操作,则可以通过从控制器中的操作处理程序返回true来导致此错误,从而导致操作冒泡。 我确保控制器中的方法与操作具有相同的名称。 ???
HTML部分
<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.RollController = 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')
}
});
路由
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'
}
];
http://jsbin.com/qosujasi/1/ 我的JS bin,到目前为止它给我一个关于设置对象代理内容的错误。
答案 0 :(得分:2)
您错误地命名了您的控制器。滚动路线的正确控制器为DiceRoller.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();
}
}
});
查看this jsBin。
您需要创建模型记录才能在路线中设置值,如下所示:
DiceRoller.RollRoute = Ember.ObjectController.extend({
model:function() {
return this.store.createRecord('dice');
}
});
答案 1 :(得分:2)
我是Ember.js的新手并且也很挣扎,但对我来说,它可以将actions: {...}
从控制器移动到路线:
DiceRoller.DiceRoute = Ember.Route.extend({
model: function() {
return this.store.find('Dice');
},
actions: {...} // move actions here
});
或使用ApplicationController
代替RollController
:
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')
}
});
不是说这是正确的方法!只是说它对我有用 - 还在学习; - )
答案 2 :(得分:0)
当您按照Ember官方教程,并进入模板 - >操作章节时,您可能会在第一个示例中遇到此错误,因为此示例使用稍后解释的组件。我尝试向templates / about.hbs添加动作并使用动作处理程序创建component / about.js,但这两个不能一起工作。我猜测的诀窍是在模板/组件中定义hbs文件,但在此之前我通过创建工作 controllers / about.js是这样的:
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,他们说控制器和组件很快会合并成一件事,所以......