Marionette layoutView - отключить элемент по умолчанию в layoutView

Унаследовав от Backbone, Marionette всегда создает элемент div по умолчанию для просмотра. Такое поведение сбивает меня с толку, когда я готовлю шаблон для представления, а затем вдруг обнаруживаю, что один родительский элемент div создается в DOM поверх моего шаблона.

Я действительно хочу, чтобы все мои HTML-коды по умолчанию, классы, идентификаторы были в шаблонах, а не в коде инициализации представления.

Есть ли способ отключить вставку div по умолчанию в Marionette?


person Nicolas S.Xu    schedule 31.08.2014    source источник
comment
У вас есть элемент верхнего уровня в вашем шаблоне? Если это так, укажите этот элемент для определения представления. Покажите разметку для вашего шаблона, если хотите больше деталей.   -  person kinakuta    schedule 01.09.2014


Ответы (3)


Чтение документации показывает следующее:

this.el создается из свойств tagName, className, id и атрибутов представления, если они указаны. Если нет, el — пустой div.

Должно относиться и к марионетке.

person m90    schedule 31.08.2014
comment
Я попытался установить tagName:'' в литерал объекта в функции extend(), но получил ошибку. Невозможно создать ‹› - person Nicolas S.Xu; 31.08.2014

Вы можете установить tagName, но вы должны дать ему имя тега, а не пустую строку. Это будет окружать ваш код шаблона при его отображении, как это делает div.

Похоже, вы хотите, чтобы элемент View «был» родительским элементом из шаблона, возможно, чтобы избежать лишних div — раньше меня это тоже раздражало, есть способы обойти это, но это хакерство и проблемы с повторным рендерингом, привязка событий и работа nt для шаблонов, у которых нет родительского элемента - для меня это вызвало сложности до такой степени, что я теперь принял div и пошел дальше :)

Это подход - Backbone, а не упаковка this.el, но я рекомендуем принять div, если вы хотите сохранить идентификаторы и классы в шаблонах, вы все равно можете это сделать.

person Dan W    schedule 03.09.2014

to @rwdrwd, я перегружаю функцию рендеринга региона, позволяя использовать шаблон рендеринга без корневого элемента div.

Я не уверен, что этот подход остановит привязку событий и конфликтует с другими частями магистрали.

Marionette.Region.prototype.attachHtml = function(view){
     // my code:
     this.el.innerHTML='';
     this.el.innerHTML = view.el.innerHTML;
     // instead 'appendChild', I just assign the innerHTML of the view.el. 

     // Original implementation: 
     // 
     // this.el.innerHTML='';
     // this.el.appendChild(view.el);

};

Как вы думаете, это хорошая практика?

person Nicolas S.Xu    schedule 06.09.2014