Как передать параметры в представление
У меня есть серия кнопок, которые при нажатии отображают всплывающее меню, расположенное чуть ниже кнопки. Я хочу передать позицию кнопки в представление. Как я могу это сделать?
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?
}
});
Ответы
Ответ 1
Вам просто нужно передать дополнительный параметр при создании MenuView. Не нужно добавлять функцию initialize
.
new MenuView({
collection: itemColl,
position: this.getPosition()
})
И затем, в MenuView
, вы можете использовать this.options.position
.
UPDATE: Как @mu слишком короткие состояния, начиная с версии 1.1.0, Backbone Views больше не присоединяют параметры, переданные конструктору как this.options, но вы можете сделать это сами, если хотите.
Итак, в вашем методе initialize
вы можете сохранить options
пройденный как this.options
:
initialize: function(options) {
this.options = options;
_.bindAll(this, 'render');
},
или используйте более тонкие способы описанные @Brave Dave.
Ответ 2
Добавьте аргумент параметров в 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
Ответ 3
Как и в случае с базой 1.1.0, аргумент options
больше не прикрепляется к просмотру (см. issue 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
});
Ответ 4
перейти из другого местоположения
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});
Ответ 5
Используйте 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/