Вопрос

У меня есть серия кнопок, которые при нажатии отображают всплывающее меню, расположенное чуть ниже кнопки. Я хочу передать положение кнопки в вид. Как я могу это сделать?

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/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top