2013-02-14 14 views
10

Mam przycisk przesyłania z wydarzeniem widoku onClick. To zdarzenie sprawdza flagę iw zależności od warunku zezwala na przesyłanie formularzy. Chciałbym wywołać akcję na kontrolerze. Jaki jest najlepszy sposób na zrobienie tego?Wywołanie akcji kontrolera z widoku w Ember

Odpowiedz

23

Oto inne rozwiązanie oparte na przykład przez albertjan dla przypadek, w którym musisz wykonać pewną logikę w widoku, a następnie w delegacji zjadłem do kontrolera. To jest droga i rozumieć swoje pytanie:

HBS:

<script type="text/x-handlebars" data-template-name="index"> 
    <button {{action submit target="view"}} >Sumbit</button> 
</script> 

Widok:

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

Kontroler:

App.ThingController = Em.ObjectController.extend({ 
    submitInController: function(model) { 
     // do the controller part of your logic 
    } 
}); 

Uwaga: Połączenie z widoku będzie również bańką do aktualnej trasy. Jest to w zasadzie ten sam kod, który ember wykonuje podczas używania pomocnika akcji.

1

chciałbym obsłużyć całą imprezę na kontrolerze:

HBS:

<script type="text/x-handlebars" data-template-name="index"> 
    <button {{action "submit"}}>Sumbit</button> 
</script> 

Kontroler:

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. 
    } 
});     
+0

Nie ma tu możliwości. – bcardarella

+0

Dlaczego nie jest to możliwe? Czy wytłumaczysz proszę? – albertjan

+1

Prześlij prawdopodobnie wymaga pewnych rzeczy związanych z DOM, których kontroler nie może (łatwo) zobaczyć. – DRobinson

1

W wersji 1.0.0 Ember odniosłem sukces dodając akcje do ich własnych obiektów w sterowniku.

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

Aby uzyskać więcej informacji, zapoznaj się z {{action}} helper documentation z Ember przewodników.

0

Możesz wywołać akcję z widoku, jeśli widok korzysta z ViewTargetActionSupport mixin. Poniższy przykład demonstruje jego użycie:

App.SomeController = Ember.Controller.extend({ 
    actions: { 
     doSomething: function() { 
      alert('Doing something!'); 
     } 
    } 
}); 

App.SomeView = Ember.View.extend(Ember.ViewTargetActionSupport, { 
    someMethod: function() { 
     this.triggerAction({action: 'doSomething'}); 
    } 
}); 
Powiązane problemy