Emberjs什么也没处理

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>&nbsp;</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,到目前为止,它给我有关设置对象代理内容的错误。

Nic*_*n16 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();
        }
    }
});
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)