"Load" - event im "events" - Eigenschaft der Backbone-Sicht
Normalerweise jede Veranstaltung, die ich hören kann für jQuery kann ich auch warten Rückgrat. In anderen Worten, wenn ich:
var MyView = Backbone.View.extend();
var view = new MyView();
view.$el.html('<button>');
var onClick = function() {
alert('woot!');
};
und ich will trigger onClick
wenn die Schaltfläche geklickt wird, ich könnte tun:
$('button').on('click', onClick);
aber, denn ich bin mit Rückgrat würde ich stattdessen tun:
var MyView = Backbone.View.extend({
events: {click: onClick}
});
Jedoch, dass funktioniert nicht mit dem load
event des iframes, also wenn ich habe:
view.$el.html('<iframe src="www.stackoverflow.com"></iframe>');
var onLoad = function() {
alert('woot!');
};
Ich tun kann:
$('iframe').on('load', onLoad);
aber ich kann das nicht:
events: {load: onLoad}
Meine Frage ist zweiteilig: 1) warum funktioniert das nicht und 2) gibt es eine Möglichkeit, das zu umgehen, aber immer noch verwenden Rückgrat ist events
statt raw JQuery?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Ereignissen in
events
befestigt sind, mitdelegateEvents
und verwendet die delegation form von jQueryon
. Aberon
delegation funktioniert nur mit Ereignissen, die die Blase:So ein
load
Ereignis in derevents
Objekt nicht etwas für Sie tun, weilload
nicht sprudeln dem DOM, so dass es nicht Arbeit mit event-delegation.Sie es manuell zu tun (vielleicht mit
this.$('iframe').on
richtig zu isolieren, es zuiframe
s innen Ihre viewel
) oder mit einer separaten Ansicht für die<iframe>
. Letzteres funktioniert, weil, wenn Sie nicht über einen Selektor inevents
:dann das Ereignis gebunden ist, direkt zur Ansicht
el
. Wenn Sie eine Ansicht wie diese:dann die
el
wird<iframe src="http://example.com"></iframe>
und dieload
Ereignis gebunden wird, direkt zu, dass<iframe>
. Dies kann oder kann nicht arbeiten, je nachdem, was genau Sie brauchen den event-handler zu tun.