Как перенести параметры в вид
-
25-10-2019 - |
Вопрос
У меня есть серия кнопок, которые при нажатии отображают всплывающее меню, расположенное чуть ниже кнопки. Я хочу передать положение кнопки в вид. Как я могу это сделать?
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?
}
});
Решение
Вам просто нужно передать дополнительный параметр при создании Menuview. Не нужно добавлять initialize
функция
new MenuView({
collection: itemColl,
position: this.getPosition()
})
А затем, в MenuView
, вы можете использовать this.options.position
.
ОБНОВИТЬ: В качестве @mu - это слишком короткие штаты, с 1.1.0, Просмотры магистралей больше не автоматически прикрепляют параметры, передаваемые к конструктору как этот. Опции, но вы можете сделать это самостоятельно, если предпочитаете.
Так в твоем initialize
метод, вы можете сохранить options
прошел как this.options
:
initialize: function(options) {
this.options = options;
_.bindAll(this, 'render');
},
или используйте некоторые более тонкие способы, как описано @brave Dave.
Другие советы
Добавить аргумент параметров в 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
На основе 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});
Использовать это. Опции Чтобы получить аргумент ввиду
// 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/