Ember - действия контроллера не найдены в представлении

Хорошо, прочитал все обновленные руководства и до сих пор не могу понять, почему действия моего контроллера не вызываются из представления. В моем приложении ember в application.handlebars вставлено представление навигации, например:

{{view App.NavigationView}}
{{outlet}}

Контроллер навигации выглядит так:

App.NavigationController = Ember.ObjectController.extend({
  navAction: function() {
    console.log('navAction');
  }
});

Шаблон навигации:

<ul class="nav">
  <li>{{#linkTo "dashboard"}}Dashboard{{/linkTo}}</li>
  <li>{{#linkTo "contacts"}}Contacts{{/linkTo}}</li>
  <li>{{#linkTo "campaigns"}}Campaigns{{/linkTo}}</li>
  <li>{{#linkTo "transactions"}}Transactions{{/linkTo}}</li>
  <li><a {{action "navAction"}}>navAction</a></li>
</ul>

Есть идеи? Заранее спасибо.


person user1938736    schedule 03.01.2013    source источник


Ответы (3)


Я думаю, что первая ошибка заключается в использовании {{view App.NavigationView}}, потому что в него не внедряется NavigationController.

попробуйте использовать новый помощник {{render}}, например {{render navigation}}. Он будет искать как NavigationView, NavigationController, так и «навигацию» шаблона и должен быть подключен все вместе.

Затем помощник {{action}} теперь действует, как описано в документации: http://emberjs.com/guides/templates/actions/

Вот короткий пример (просто пропустите использование {{render}} http://jsfiddle.net/JLHuG/40/

Здесь я определил действие в текущем маршруте, но если вы определите его в контроллере (раскомментируйте его), это будет обрабатываться контроллером.

person sly7_7    schedule 03.01.2013

Возможно, взгляните на следующий пост: {{action}} с событием click не запускает функцию в маршрутизаторе Ember v2

В нем говорится об использовании нового помощника под названием {{linkTo}}.

person mavilein    schedule 03.01.2013

Укажите целевую опцию в помощнике {{action}}, чтобы указать, какой объект должен получить вызов метода. Например:

{{действие "navAction" target="controller"}}

Если параметр target не указан, то он будет указывать на свойство controller.target, которое обычно устанавливается для маршрутизатора. Однако цель может быть установлена ​​​​на сам контроллер следующим образом;

App.NavigationController = Ember.ObjectController.extend({

       init : function(){
        this._super();
        this.set("target", this);
  },

navAction: function() {
console.log('navAction');  

} });

Вы можете сослаться на следующую суть, которая ясно объясняет подробно о помощнике {{action}}: https://gist.github.com/3595069

person phkavitha    schedule 03.01.2013
comment
Спасибо за рекомендацию; к сожалению установка таргета в init не сработала. Я использую последние сборки, если это имеет какое-либо значение. - person user1938736; 03.01.2013
comment
Хм, я почти уверен, что теперь целью действия по умолчанию является контроллер... если это не работает, это должно быть ошибкой. - person sly7_7; 03.01.2013