错误:未捕获的错误:没有行程动作'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,到目前为止,它给了我一个关于设置对象代理内容的错误。
3条答案
按热度按时间okxuctiv1#
您的控制器命名不正确。滚动路线的正确控制器应该是
DiceRoller.RollController
。在
RollController
中,你应该在roleDice
操作中得到模型,你不需要属性列表。看看this jsBin。
您需要创建模型记录,以便能够在路线中为其设置值,如下所示:
s3fp2yjn2#
我是Ember.js的新手,也很挣扎,但对我来说,要么将
actions: {...}
从控制器移动到路由:或使用
ApplicationController
代替RollController
:不是说这是正确的方法!只是说它对我有效--还在学习;- )
azpvetkf3#
当你按照Ember官方教程,并得到模板-〉动作章节,你可能会遇到这个错误的第一个例子,因为这个例子使用组件,将在后面解释.我尝试添加动作到templates/about.hbs和创建组件/about. js与动作处理程序,但这两个不能一起工作。我猜诀窍是在templates/components/中定义hbs文件,但在此之前,我通过创建controllers/about来使操作工作。如下所示:
这是EmberCli环境,v2.0.0,他们说控制器和组件将很快合并成一个东西,所以...