0

У меня есть этот код в моем HTML-страницу:Как отправить событие в Ember?

<script type="text/x-handlebars" data-template-name="logged"> 
    <h1>Page</h1> 
      {{view.name}} 
     {{#view App.LoginButton}} 
      <button type="button">This is a clickable area!</button> 
     {{/view}} 

</script> 

И у меня есть этот код в моем JS скрипт:

App=Ember.Application.create(); 
App.Route= Ember.Route.extend({ 
    events: { 
    /* turnItUp: function(level){ 
     alert("ee"); 
    }*/ 
    } 
}); 

App.Router.map(function() { 
    this.resource('logged', {path: '/'}); 
}); 

App.LoginButton= Ember.View.extend({ 
    click: function(evt) { 
    this.get('controller').send('turnItUp', 11); 
    } 
}); 
App.PlaybackController = Ember.Controller.extend({ 
events:{ 
    turnItUp: function(level){ 
    alert(level); 
    } 
} 
}); 

Когда я нажимаю на кнопку, я получаю эту ошибку:

Uncaught Error: Nothing handled the event 'turnItUp'. 

ПОЧЕМУ ??? извините за мой плохой английский и заранее спасибо

+0

Для начала вы ссылаетесь на кнопку, которая не существует. Вы используете пространство имен «MyTalk», но этого не существует в вашем приложении. Попробуйте изменить 'MyTalk.LoginButton' на' App.LoginButton' для начала. – commadelimited

+0

жаль, что я забыл изменить пространство имен в вопросе, в моем приложении пространство имен правильно – sircamp

ответ

0

То, что вы ищете, называется Действие в уголек

http://emberjs.com/guides/templates/actions/

http://emberjs.com/api/classes/Ember.Handlebars.helpers.html#method_action

<button {{action turnItUp 11}}>This is a clickable area!</button> 

App.PlaybackController = Ember.Controller.extend({ 
    turnItUp: function(value){ 
    alert(value); 
    } 
}) 

(при условии, что PalyBackController является текущий контроллер вид)

1

When I click on a button, I get this error:

Uncaught Error: Nothing handled the event 'turnItUp'. 

WHY???

Поскольку ни контроллер, ни маршрут не были настроены для обработки события turnItUp. Вот что происходит:

  1. Пользователь нажимает на кнопку, запускающего App.LogginButton.click()
  2. click() вызовы get('controller') которая возвращает <(generated logged controller)> - вероятно, не то, что можно было бы ожидать.
  3. click() посылает turnItUp в <generated logged controller>
  4. <generated logged controller> не turnItUp метода так делегирует текущий маршрут
  5. Там нет turnItUp событий на текущем маршруте или любом из его родителей, так что вы видите ошибку

Поэтому в будущем для отладки этого типа попробуйте добавить консольный журнал, чтобы убедиться, что контроллер - это то, что, по вашему мнению, должно быть:

App.LoginButton= Ember.View.extend({ 
    click: function(evt) { 
    console.log('controller: ', this.get('controller').toString()); 
    this.get('controller').send('turnItUp', 11); 
    } 
}); 

Теперь другое, что нужно изменить, заключается в том, что события контроллера не должны вставляться в свойство events - это только для маршрутов. Поэтому, чтобы все сработало, попробуйте следующее:

App.LoggedController = Ember.Controller.extend({ 
    turnItUp: function(level){ 
    alert(level); 
    } 
}); 
+0

ты лучший! благодаря!!!!!! – sircamp

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