Also hier ist mein einfaches Popover-Modul wieder. Es kann einer Ansicht zugewiesen werden, die das Popover auslöst:
function(app) {
var Popover = app.module();
Popover.Views.Default = Backbone.View.extend({
className: 'popover',
initialize: function() {
this.visible = true;
this.render();
},
setReference: function(elm) {
this.reference = elm;
this.reference.bind('click', this.toggle);
},
beforeRender: function() {
this.content = this.$el.find('.popover');
},
show: function() {
//this.visible = true;
},
hide: function() {
//this.visible = false;
},
toggle: function() {
this.visible ? this.hide() : this.show();
}
});
// Erforderlich, um das Modul für die AMD-Konformität zurückzugeben.
return Popover;
});
So setze ich das Popover:
Main.Views.Start = Backbone.View.extend({
template: "main/start",
serialize: function() {
return { model: this.model };
},
initialize: function() {
this.listenTo(this.model, "change", this.render);
},
beforeRender: function(){
this.popover = new Popover.Views.Default();
this.insertView(this.popover);
},
afterRender: function() {
this.popover.setReference(this.$el.find('.member'));
}
});
Ich möchte, dass die toggle-Funktion des Popovers aufgerufen wird, wenn this.$el.find('.member')
angeklickt wird. Das funktioniert gut. Allerdings kann ich innerhalb der toggle-Funktion nicht auf "this" vom Popover-Objekt zugreifen, stattdessen enthält "this" das HTML seines Elternelements. Daher erhalte ich in der toggle-Funktion einen Fehler:
TypeError: Object [object HTMLAnchorElement] has no method 'show'
Irgendwelche Ideen, wie ich Zugriff auf das eigentliche Popover-Objekt im toggle-Callback erhalten kann?