2015-05-07 2 views
0

Ничего не обрабатывается ошибка действия для следующего кода. Как это решить?Ember - Ничего не обработано, происходит действие

Я создал объект для моего примера с использованием ember. Но часть действия не работает.

Как связать действие с представлением?

HTML:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>Ember Starter Kit</title> 
    <link rel="stylesheet" href="css/normalize.css"> 
    <link rel="stylesheet" href="css/style.css"> 
    <link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.no-icons.min.css" rel="stylesheet"> 
</head> 
<body> 

<script type="text/x-handlebars"> 
    <ul class="mod-choosable-list">  
    {{view Ember.CollectionView 
     contentBinding="App.teachersController" 
     itemViewClass="App.TeacherView" 
     tagName="div" 
    }} 
    </ul> 
</script> 

<script type="text/x-handlebars" data-template-name="teacher-view"> 
    <div {{action 'refresh'}}><b>{{view.content.name}}</b></div> 
</script> 




    <script src="js/libs/jquery-v1.11.1.js"></script> 
    <script src="js/libs/handlebars-v1.3.0.js"></script> 
    <script src="js/libs/ember-v1.6.1.js"></script> 
    <script src="http://cdnjs.cloudflare.com/ajax/libs/showdown/0.3.1/showdown.min.js"></script> 
    <script src="http://cdnjs.cloudflare.com/ajax/libs/moment.js/2.1.0/moment.min.js"></script> 
    <script src="js/app.js"></script> 
</body> 
</html> 

JS:

App = Ember.Application.create({}); 

App.Teacher = Ember.ObjectController.extend({ 
    id: null, 
    name: null, 
    students: null, 
    actions: { 
     refresh: function(){ 
      alert("refresh"); 
     } 
     } 
}); 


App.TeacherView = Ember.View.extend({ 
    templateName: 'teacher-view' 
}); 



App.set('teachersController', Ember.ArrayController.create({ 
    content: [ 
     App.Teacher.create({id:1, name: "mr.katz", students: [2, 3]}), 
     App.Teacher.create({id:2, name: "mr.dale", students: [1]}) 
     ] 
})); 

ответ

1

Когда вы вызываете действие refresh, уголек будет выглядеть для действия в контроллере. Поскольку вы не указали контроллер для представления, будет использоваться контроллер для шаблона приложения, который равен App.ApplicationController.

Вы можете использовать следующий код, и ваше действие будет срабатывать.

App.ApplicationController = Em.Controller.extend({ 
    actions: { 
    refresh: function(){ 
     alert("refresh"); 
    } 
    } 
}); 

Вы также можете указать действия в представлении. В этом случае вам нужно будет указать цель для действия. Это скажет ember, где искать обработчик действий.

App.TeacherView = Ember.View.extend({ 
    templateName: 'teacher-view', 
    actions: { 
    refresh: function(){ 
     alert("refresh"); 
    } 
    } 
}); 

<div {{action 'refresh' target="view"}}><b>{{view.content.name}}</b></div> 

Вы можете указать контроллер для просмотра на его init случае.

App.TeacherView = Ember.View.extend({ 
    templateName: 'teacher-view', 
    setup:function() { 
    this.set('controller', App.Teacher.create()); 
    }.on('init') 
}); 
+0

Большое спасибо .. Я попробовал бывший. Но мне было интересно, почему я не работал с последним. Я забыл указать target = "view" в действии. – radcliff

+0

Как создать контроллер для этого вида и установить на него действия? – radcliff

+0

Я обновил свой ответ. – blessenm

Смежные вопросы