Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Emberjs没有处理此操作_Javascript_Ember.js_Dom Events_Action - Fatal编程技术网

Javascript Emberjs没有处理此操作

Javascript Emberjs没有处理此操作,javascript,ember.js,dom-events,action,Javascript,Ember.js,Dom Events,Action,错误:未捕获错误:没有处理“rollDice”操作。如果确实处理了该操作,则此错误可能是由于从控制器中的操作处理程序返回true而导致该操作冒泡 我确保控制器中的方法与操作具有相同的名称。 HTML部分 <script type="text/x-handlebars"> {{outlet}} </script> <script type="text/x-handlebars" id=&quo

错误:未捕获错误:没有处理“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.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'
}
];

My JS bin,到目前为止,它在设置对象代理的内容时给了我一个错误。

您错误地命名了控制器。滚动路线的正确控制器应为
dicerroll.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();
        }
    }
});
退房

您需要创建模型记录,以便能够在管线中对其设置值,如下所示:

DiceRoller.RollRoute = Ember.ObjectController.extend({
    model:function() {
        return this.store.createRecord('dice');
    }
});
import Ember from 'ember';

export default Ember.Controller.extend({
isBody: false,
  actions: {
    toggleBody() {
        console.log("Look at me go!");
        this.toggleProperty('isBody');
    }
  }
});

我刚接触Ember.js,也很挣扎,但对我来说,将
操作:{…}
从控制器移动到路由:

DiceRoller.DiceRoute = Ember.Route.extend({
    model: function() {
        return this.store.find('Dice');
    },
    actions: {...} // move actions here
});
使用
应用程序控制器
而不是
滚动控制器

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

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

当您遵循Ember官方教程并进入模板->操作章节时,您可能会在第一个示例中遇到此错误,因为此示例使用了稍后解释的组件。我尝试将动作添加到模板/about.hbs中,并使用动作处理程序创建组件/about.js,但这两个组件无法协同工作。我猜诀窍是在模板/组件/中定义hbs文件,但在此之前,我通过创建 controllers/about.js如下所示:

DiceRoller.RollRoute = Ember.ObjectController.extend({
    model:function() {
        return this.store.createRecord('dice');
    }
});
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,他们说控制器和组件很快就会合并成一个东西,所以…

我已经编辑了控制器的名称,但操作仍然没有被处理。我想没有指定路线,但我找不到。我已经更新了答案,尝试一下,看看是否有效。我已经添加了我使用的模板。好的,我明白了没有财产清单的原因。我想让控制器创建一个新的rotateXvalue、rotateYvalue值,并将其保存到模型中,以便更新骰子。您在哪里创建骰子模型?我签出了jsBin,并将RollController中的代码替换为console.log(“Stuff”)。我想发生的是我的包含RollController的文件没有被正确引用。你有一个带有
{{outlet}}
的应用程序模板吗?另外,我认为路由器中的DiceRoute是找到模型的东西?因为你使用的是/#/roll,您的路线将是
RollRoute
,而您的控制器将是
RollController
。您仍然可以将骰子模型用于此路由,如下面的示例所示。我已将router.js中的骰子路由更改为RollRoute。我使用夹具适配器为我的模型创建了一个记录。它之所以有效,是因为记录的值提供了呈现骰子所需的CSS值。我只是无法让动作事件正常工作,即更改模型中的值以使骰子滚动。