У меня есть ряд кнопок, при нажатии на которые отображается всплывающее меню, расположенное чуть ниже кнопки. Я хочу передать положение кнопки представлению. Как я могу это сделать?
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?
}
});
javascript
backbone.js
Викмалхотра
источник
источник
this.options
, но вы можете сделать это сами, если хотите». .this.options.position
, а неoptions.position
. Представления использовались для присоединенияinitialize
аргументов,this.options
но это перестало происходить в 1.1.0.Добавьте аргумент options в
initialize
:initialize: function(options) { // Deal with default options and then look at options.pos // ... },
А затем передайте некоторые параметры при создании своего представления:
var v = new ItemView({ pos: whatever_it_is});
Для получения дополнительной информации: http://backbonejs.org/#View-constructor
источник
this.options
вызывает у меня кошмары при обслуживании и отладке.this.options
initialize: function(options) { ... }
это нормально, изменение состоит в том, что Backbone больше не устанавливаетthis.options
для вас автоматически : «Backbone Views больше не присоединяет автоматически параметры, переданные в конструктор какthis.options
, но вы можете сделать это сами, если хотите». .Начиная с backbone 1.1.0,
options
аргумент больше не прикрепляется автоматически к представлению (см. Обсуждение в проблеме 2458 ). Теперь вам нужно вручную прикрепить параметры каждого вида:MenuView = Backbone.View.extend({ initialize: function(options) { _.extend(this, _.pick(options, "position", ...)); } }); new MenuView({ collection: itemColl, position: this.getPosition(), ... });
В качестве альтернативы вы можете использовать этот мини-плагин для автоматического добавления параметров из белого списка, например:
MenuView = Backbone.View.extend({ options : ["position", ...] // options.position will be copied to this.position });
источник
перейти из другого места
new MenuView({ collection: itemColl, position: this.getPosition() })
Добавьте аргумент параметров для инициализации, чтобы получить эту переданную переменную,
initialize: function(options) { // Deal with default options and then look at options.pos // ... },
чтобы получить ценность использования -
var v = new ItemView({ pos: this.options.positions});
источник
Используйте this.options для получения аргумента в представлении
// 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'}); });
Рабочий пример: http://jsfiddle.net/Cpn3g/1771/
источник