Ich habe eine Reihe von Schaltflächen, die beim Anklicken ein Popup-Menü anzeigen, das direkt unter der Schaltfläche positioniert ist. Ich möchte die Position der Schaltfläche an die Ansicht übergeben. Wie kann ich das machen?
ItemView = Backbone.View.extend({
tagName: 'li',
events: {
'click': 'showMenu'
},
initialize: function() {
_.bindAll(this, 'render');
},
render: function() {
return $(this.el).html(this.model.get('name'));
},
showMenu: function() {
var itemColl = new ItemColl();
new MenuView({collection: itemColl}); // how to pass the position of menu here?
}
});
dira
Sie müssen nur den zusätzlichen Parameter übergeben, wenn Sie die MenuView erstellen. Keine Notwendigkeit, die hinzuzufügen initialize Funktion.
new MenuView({
collection: itemColl,
position: this.getPosition()
})
Und dann hinein MenuViewkönnen Sie verwenden this.options.position.
Dies funktioniert perfekt, fügen Sie einfach den Parameter in Ihrer Ansichts-Initialisierungsmethode hinzu: initialize: function (options) { alert(options.position); }
– Cabuxa.Mapache
17. Februar 2014 um 10:53 Uhr
@Cabuxa.Mapache Nein, es funktioniert nicht. Diese Antwort verwendet this.options.positionnicht options.position. Ansichten zum Anhängen der initialize Argumente zu this.options aber das passierte in 1.1.0 nicht mehr.
– mu ist zu kurz
30. Mai 2014 um 0:16 Uhr
Mu ist zu kurz
Fügen Sie ein Optionsargument hinzu initialize:
initialize: function(options) {
// Deal with default options and then look at options.pos
// ...
},
Und übergeben Sie dann einige Optionen, wenn Sie Ihre Ansicht erstellen:
das ist für die meisten Situationen eleganter/einfacher.
– Cullen SONNE
20. Mai 2013 um 4:46 Uhr
@CullenSUN: Danke. Ich bevorzuge die Eindeutigkeit dieses Ansatzes, die magische „Fernwirkung“ des Gebrauchs this.options gibt mir Wartungs- und Debugging-Albträume.
– mu ist zu kurz
20. Mai 2013 um 4:55 Uhr
Ich habe zuerst den Backbone-Link gesehen, aber Ihr Beispiel hat es mir verdeutlicht. Vielen Dank
– Manuel Hernández
6. August 2013 um 15:01 Uhr
Dies ist veraltet und Sie können es nicht mehr verwenden this.options
Ab Backbone 1.1.0 ist die options Argument ist nicht mehr befestigt automatisch zur Ansicht (vgl Ausgabe 2458 zur Diskussion). Sie müssen nun die Optionen jeder Ansicht manuell anhängen:
Alternativ können Sie verwenden dieses Mini-Plugin Optionen auf der Whitelist automatisch anhängen, etwa so:
MenuView = Backbone.View.extend({
options : ["position", ...] // options.position will be copied to this.position
});
Pass von einem anderen Ort
new MenuView({
collection: itemColl,
position: this.getPosition()
})
Fügen Sie ein Optionsargument hinzu, um es zu initialisieren, da Sie diese übergebene Variable erhalten.
initialize: function(options) {
// Deal with default options and then look at options.pos
// ...
},
um den Wert zu erhalten –
var v = new ItemView({ pos: this.options.positions});
Verwenden diese.optionen um Argumentr in Sicht abzurufen
// Place holder
<div class="contentName"></div>
var showNameView = Backbone.View.extend({
el:'.contentName',
initialize: function(){
// Get name value by this.options.name
this.render(this.options.name);
},
render: function(name){
$('.contentName').html(name);
}
});
$(document).ready(function(){
// Passing name as argument to view
var myName1 = new showNameView({name: 'Nishant'});
});