2016-08-08 24 views
0

Ich habe eine Komponente, die ein Textfeld hat, wie dieseKomponente kann nicht Aktion finden

<div> 
    {{input type='text' insert-newline='postMessage' class="form-control" autofocus="true"}} 
    <input type="hidden" name="uid" value={{room.uid}}/> 
</div> 

die Komponente, die diese Schnipsel hat, lebt in einer Route room

export default Ember.Route.extend({ 
    model(params){ 
    this.store.findRecord('room', params.uid); 
    } 
}); 

nannte die Aktion zu handhaben im input, habe ich einen Controller für das Zimmer: app/controllers/room.js

import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    actions: { 
    postMessage(params){ 
     console.log(params); 
    } 
    } 
}); 

aber wenn ich die Eingabetaste drücken, bekomme ich diesen Fehler:

Uncaught Error: <[email protected]:chat-room::ember1071> had no action handler for: postMessage 

Ich habe versucht, diese Aktion in der Strecke als auch zu setzen und nicht

+0

Ist der Template-Code, den Sie schreiben ed innerhalb einer eigenen Komponente? – xcskier56

+0

ja, es ist @ xcskier56 –

+0

Ember beschränkt Komponentenaktionen auf die Komponente selbst. Versuchen Sie, den Aktionshandler in die Komponente einzufügen. – xcskier56

Antwort

1

In der room.hbs Datei gearbeitet,

{{my-component myAction='postMessage'}} 

und dann in my-component.js

import Ember from 'ember'; 

export default Ember.Component.extend({ 
    actions: { 
    postMessage(params) { 
     this.sendAction('myAction', params); 
    } 
    } 
}) 
+0

großartig. auch, wie bekomme ich die params der form in der aktion? weil meine 'console.log (params)' logs 'undefined' –

+1

Ich bin mir nicht sicher. Ich würde erwarten, dass die Params das Ereignis sein werden, das gesendet wird, und dann könntest du es von dort holen. Versuchen Sie, ein anderes Ereignis zu verwenden, z. B. "Enter". Ich habe das gleiche Setup mit 'key-up'. Die Ereignisse, die Sie verwenden können, finden Sie hier: http://emberjs.com/api/classes/Ember.Templates.helpers.html#method_textarea – xcskier56

+0

Zum Übergeben von Parametern von der Vorlage an die Komponente in Aktion {{action "postMessage" params}} https://guides.emberjs.com/v2.7.0/templates/actions/#toc_action-parameters – Ravin