Wie rufe ich eine action-Methode, die auf Steuerung von außen, mit dem gleichen Verhalten, indem Sie {{action}}
Schauen Sie bitte auf diesen code...
``
App.BooksRoute = Ember.Route.extend({
model: return function () {
return this.store.find('books');
}
});
App.BooksController = Ember.ArrayController.extend({
actions: {
updateData: function () {
console.log("updateData is called!");
var books = this.filter(function () {
return true;
});
for(var i=0; i<books.length; i++) {
//doSomething…
}
}
}
});
``
Möchte ich nennen, die updateData
Aktion auf BooksController von außen.
Ich habe versucht, diesen code.
App.__container__.lookup("controller:books").send('updateData');
Es funktioniert tatsächlich. Aber, in der updateData
Aktion, die this
von der unterscheidet, in der updateData
genannt wurde, indem Sie {{action 'updateData'}} auf books
Vorlage.
Bei Klick auf {{action 'updateData'}}, der this.filter()
Methode in updateData
Aktion wird die Rückgabe der Bücher Modelle.
Aber, Im Falle der Berufung App.__container__.lookup("controller:books").send('updateData');
, die this.filter()
Methode in updateData
Aktion wird nichts zurück.
Wie rufe ich die updateData
Aktion auf BooksController von außen, mit dem gleichen Verhalten, indem Sie {{action 'updateData'}}.
Ich würde mich freuen, es zu wissen.
(Ich bin mit Ember.js 1.0.0)
InformationsquelleAutor EMADURANDAL | 2013-09-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie entweder
bind
oderjQuery.proxy
.bind
ist in JS seit der version 1.8.5, so ist es ziemlich sicher zu verwenden, es sei denn, Sie müssen zur Unterstützung von sehr alten Browsern. http://kangax.github.io/es5-compat-table/So oder so, bist du grundsätzlich manuell Erfassungsbereich für die
this
Objekt.So, wenn Sie diese
IndexController
, und Sie auslösen wollteraiseAlert
von außerhalb der app.Mit
bind
:Mit
jQuery.proxy
Interessanterweise
this
scheint OK zu sein, ohne über einebind
oderproxy
in diesem JSBin.Hier ein JSBin zeigen alle diese: http://jsbin.com/ucanam/1080/edit
[UPDATE] : ein Weiterer JSBin, dass Anrufe
filter
in der Aktion : http://jsbin.com/ucanam/1082/edit[UPDATE 2] : ich habe Dinge zu arbeiten, von der Suche bis
"controller:booksIndex"
statt"controller:books-index"
.Hier ein JSBin : http://jsbin.com/ICaMimo/1/edit
Und die Art und Weise zu sehen, es funktioniert (da sind die Wege seltsam) : http://jsbin.com/ICaMimo/1#/index
this.get('testValue')
, aber nicht die gewünschten Werte austhis.filter()
Methode. Nach meiner Debuggenthis
in die ich genanntApp.__container__.lookup("controller:books").send('updateData');
(oder als Aktion, indem Ihr zwei Möglichkeiten) und die andere in dem ich geklickt {{action 'updateData'}} sind ziemlich unterschiedlich. Ich glaube, dass die anderen Lösungen benötigt werden...Hmm... wenn rufen Sie es aus dem inneren Glut, können Sie genau sagen, was
this
ist? Ist es tatsächlich dieBooksController
oder ist es vielleicht doch ein Blick?Die
this
in die ich geklickt {{action}} scheint zu sein, die BooksController.(Sorry, ich könnte falsch sein.) Aber etwas ist anders. Zumindest die Eigenschaften unterschiedlich sind.Ich überprüfte stacktrace wie folgt... ### durch klicken auf {{action}} Ember.ActionHandler.Ember.Mixin.erstellen.senden (anonyme Funktion) Backburner.laufen Ember.laufen Ember.onLoad.ActionHelper.registerAction.ActionHelper.registerdAction.(anonyme Funktion).handler (anonym funciton) Ember.handleErrors (anonyme Funktion) x.event.Versand (jQuery) x.event.hinzufügen.v.Griff (jQuery) ### durch den Aufruf
App.__container__.lookup("controller:books").send('updateData');
Ember.ActionHandler.Ember.Mixin.erstellen.senden (MyLocalScope)Meybe, diese Funktionen im stack-trace scheinen auf die Instanz des Controllers.
InformationsquelleAutor Jeremy Green
Dies löste mein ähnliches Problem
Lesen Sie mehr über die Aktion boubling hier: http://emberjs.com/guides/templates/actions/#toc_action-bubbling
InformationsquelleAutor consideRatio
Könnte man einfach haben, die Glut Aktion rufen Sie Ihre Methode eher als die Behandlung in der Handlung selbst.
Nun, wenn Sie wollen, rufen Sie updateData(), verwenden Sie einfach
Oder im Falle einer LENKER-Datei
InformationsquelleAutor stealthysnacks