Emberjs nothing处理此操作

jpfvwuh4  于 2022-11-23  发布在  其他
关注(0)|答案(3)|浏览(124)

错误:未捕获的错误:没有行程动作'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>

控制器

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,到目前为止,它给了我一个关于设置对象代理内容的错误。

okxuctiv

okxuctiv1#

您的控制器命名不正确。滚动路线的正确控制器应该是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');
    }
});
s3fp2yjn

s3fp2yjn2#

我是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')
    }
});

不是说这是正确的方法!只是说它对我有效--还在学习;- )

azpvetkf

azpvetkf3#

当你按照Ember官方教程,并得到模板-〉动作章节,你可能会遇到这个错误的第一个例子,因为这个例子使用组件,将在后面解释.我尝试添加动作到templates/about.hbs和创建组件/about. js与动作处理程序,但这两个不能一起工作。我猜诀窍是在templates/components/中定义hbs文件,但在此之前,我通过创建controllers/about来使操作工作。如下所示:

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,他们说控制器和组件将很快合并成一个东西,所以...

相关问题