Доступность элементов пользовательского интерфейса в 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()
.
Ответы
Ответ 1
Привязывание представления к существующему элементу является исключением. Жизненный цикл нормального представления включает вызов render
, и без этого не будет ничего, для чего элементы интерфейса будут привязаны к.
Просто вызовите this.bindUIElements()
в свой метод initialize
, когда вам нужно прикрепить представление к существующему элементу.
Ответ 2
Когда я работаю с Marionette, я помещаю код, который должен получить доступ к элементам ui внутри метода onShow. Это событие запускается после того, как dom готов, и элементы готовы к манипулированию. Внутри этого метода ваш ui.whatever теперь будет указывать на элемент, а не на строку.
Ответ 3
Я думаю, что у вас есть эта проблема, потому что вам нужно получить доступ к элементу jQuery с помощью
this.ui.whatever
Потому что "this" уже является экземпляром представления.
См.: http://marionettejs.com/docs/v2.4.4/marionette.itemview.html#organizing-ui-elements