2014-08-31 2 views
0

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

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

Есть ли способ отключить вставку дефолта в марионетку?

+0

У вас есть элемент верхнего уровня, содержащий элемент в вашем шаблоне? Если это так, укажите этот элемент для определения вашего представления. Покажите разметку для своего шаблона, если вы хотите получить более подробную информацию. – kinakuta

ответ

0

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

this.el создается из вида в тэгу, имя класса, идентификатор и атрибуты свойства, если он указан. Если нет, el - пустой div.

Следует применять и к марионетке.

+0

Я попытался установить tagName: '' в объектном литерале в функции extend(), но получил ошибку. "Невозможно создать <>" –

0

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

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

Это подход - Backbone, not "this.el" wrapping, но Я рекомендую принимать divs, если вы хотите сохранить идентификаторы и классы в шаблонах, вы все еще можете это сделать.

0

to @rwdrwd, я перегружаю функцию рендеринга области, позволяя сделать шаблон рендеринга без элемента root 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); 

}; 

Считаете ли вы, что это хорошая практика?

Смежные вопросы