Подтвердить что ты не робот

Доступность элементов пользовательского интерфейса в Marionette.View

Я просто хотел бы понять решения, стоящие за поддержкой Backbone.Marionette относительно элементов пользовательского интерфейса. При создании экземпляра Marionette.View на существующем элементе DOM, например:

view = new Marionette.ItemView({
     el: "#element",
     ui : {
         whatever : "#whatever"
     }
});

Я могу получить доступ к view.$el, селектору jQuery внутри view.initialize, настолько хорошему. Однако, когда я пытаюсь получить доступ к view.ui.whatever, у меня есть только доступ к селектору, то есть строка "#whatever" вместо фактического селектора jQuery $("#whatever").

Причиной этого является то, что Marionette.View.bindUIElements() вызывается только на render и не раньше initialize.

Я хотел бы знать, считаете ли вы, что это поведение логично и почему?

Я только спрашиваю в случае присоединения представления к существующему el, если представление создается с помощью шаблона, я понимаю, почему привязка находится в render().

4b9b3361

Ответ 1

Привязывание представления к существующему элементу является исключением. Жизненный цикл нормального представления включает вызов render, и без этого не будет ничего, для чего элементы интерфейса будут привязаны к.

Просто вызовите this.bindUIElements() в свой метод initialize, когда вам нужно прикрепить представление к существующему элементу.

Ответ 2

Когда я работаю с Marionette, я помещаю код, который должен получить доступ к элементам ui внутри метода onShow. Это событие запускается после того, как dom готов, и элементы готовы к манипулированию. Внутри этого метода ваш ui.whatever теперь будет указывать на элемент, а не на строку.