hbs*_*014 5 action javascript-events ember.js
错误:未捕获错误:没有任何操作'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>
Run Code Online (Sandbox Code Playgroud)
控制者
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')
}
});
Run Code Online (Sandbox Code Playgroud)
路由
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');
}
});
Run Code Online (Sandbox Code Playgroud)
模型
DiceRoller.Dice = DS.Model.extend({
rotateXvalue: DS.attr('string'),
rotateYvalue: DS.attr('string')
});
DiceRoller.Dice.FIXTURES = [
{
rotateXvalue: '40deg',
rotateYvalue: '37deg'
}
];
Run Code Online (Sandbox Code Playgroud)
http://jsbin.com/qosujasi/1/ 我的JS bin,到目前为止,它给我有关设置对象代理内容的错误。
您对控制器的命名不正确。滚动路线的正确控制器是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();
}
}
});
Run Code Online (Sandbox Code Playgroud)
看看这个 jsBin。
您需要创建模型记录才能在路线中设置其值,如下所示:
DiceRoller.RollRoute = Ember.ObjectController.extend({
model:function() {
return this.store.createRecord('dice');
}
});
Run Code Online (Sandbox Code Playgroud)