2014-04-14 23 views
4

錯誤:未捕獲的錯誤:沒有處理動作「rollDice」。如果您確實處理了該操作,則可能是由於從控制器中的操作處理程序返回true導致該操作冒泡而導致此錯誤。 我確信,在控制器的方法具有相同的名稱作爲動作。 ???Emberjs沒有處理這個動作

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斌,到目前爲止,它給了我關於設置對象代理的內容的錯誤。

+0

你有一個帶有{{outlet}}的應用程序模板嗎? – NicholasJohn16

+0

另外,我認爲路由器中的DiceRoute是什麼發現模型? – hbs2014

+0

由於您使用/#/ roll,您的路由將是'RollRoute',而您的控制器將是'RollController'。您仍然可以使用此路線的骰子模型,如下面的示例中所示。 – NicholasJohn16

回答

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

結賬this jsBin

您需要創建模型的記錄,以便能夠在您的路線在其上設置值,如:

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

我已編輯控制器的名稱,但操作仍未處理。我認爲沒有指定路線,但我找不到它。 – hbs2014

+1

我已經更新了我的答案,試試看看它是否有效。 – NicholasJohn16

+0

我已經添加了我使用的模板。好的,我看到沒有屬性列表的原因。我希望控制器創建rotateXvalue的新值,rotateYvalue並將其保存到模型中,以便更新骰子。 – hbs2014

2

我是全新的,以Ember.js也掙扎,但對我來說它的工作要麼移動actions: {...}從控制器到路線:

DiceRoller.DiceRoute = Ember.Route.extend({ 
    model: function() { 
     return this.store.find('Dice'); 
    }, 
    actions: {...} // move actions here 
}); 

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

不是說這是正確的方式!只是說,它的工作對我來說 - 仍然在學習;-)

+0

爲我工作,謝謝! –

0

當您按照灰燼官方教程,並獲得了模板 - >操作章,你可能會碰到的第一個例子這個錯誤,因爲這個示例使用的組件稍後解釋。我嘗試向模板/ about.hbs添加動作,並使用動作處理程序創建組件/ about.js,但這兩者不能一起工作。即時猜測,關鍵是要定義模板/組件HBS文件/但在此之前,我得到的動作通過創建 控制器/ about.js這樣的工作:

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和他們說控制器和組件將很快合併成一件事,所以......

相關問題