У меня есть кнопка отправки с событием просмотра onClick
. Это событие проверяет флаг и в зависимости от условия, которое оно разрешит отправкой формы. Мне бы хотелось, чтобы действие submit
на контроллере вызывалось. Каков наилучший способ сделать это?
Вызов действия контроллера из представления в Ember
Ответ 1
Здесь другое решение, основанное на примере albertjan для случая, вам нужно выполнить некоторую логику в вашем представлении, а затем делегировать ваш контроллер. Так я понял ваш вопрос:
HBS:
<script type="text/x-handlebars" data-template-name="index">
<button {{action submit target="view"}} >Sumbit</button>
</script>
Вид:
App.ThingView = Ember.View.extend({
submit : function(){
//do the view part of your logic
var object = //do whatever you may need
this.get("controller").send("submitInController", object); //you do not have to send object, if you do not need to
}
});
Контроллер:
App.ThingController = Em.ObjectController.extend({
submitInController: function(model) {
// do the controller part of your logic
}
});
Примечание.. Вызов с вашего вида также будет зависеть от вашего текущего маршрута. Таким образом, это в основном тот же код, что и ember выполняется при использовании помощника действий.
Ответ 2
Я бы обработал все событие на контроллере:
HBS:
<script type="text/x-handlebars" data-template-name="index">
<button {{action "submit"}}>Sumbit</button>
</script>
Контроллер:
App.ThingController = Em.ObjectController.extend({
submit: function() {
//handle things here!
//change the state of your object here to reflect the changes that
//the submit made so that the view shows these.
}
});
Ответ 3
В Ember версии 1.0.0 у меня было успешное добавление действий в их собственный литерал объекта в контроллере.
IndexTemplate.html
<script type="text/x-handlebars" data-template-name="index">
<button {{action "submit"}}>Submit</button>
</script>
ThingController.js
App.ThingController = Ember.ObjectController.extend({
actions: {
submit: function() {
//handle things here!
//change the state of your object here to reflect the changes that
//the submit made so that the view shows these.
}
}
});
Для получения дополнительной информации ознакомьтесь с {{action}}
вспомогательной документацией из Ember Guides.
Ответ 4
Вы можете вызвать действие из представления, если в представлении используется ViewTargetActionSupport mixin. Следующий пример демонстрирует его использование:
App.SomeController = Ember.Controller.extend({
actions: {
doSomething: function() {
alert('Doing something!');
}
}
});
App.SomeView = Ember.View.extend(Ember.ViewTargetActionSupport, {
someMethod: function() {
this.triggerAction({action: 'doSomething'});
}
});