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.

Трябва да важи и за Marionette.

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

Можете да зададете tagName, но трябва да му дадете име на етикет, а не празен низ. Това ще заобиколи вашия шаблонен код, когато се изобрази, точно както прави div.

Изглежда, че искате елементът View да "бъде" родителският елемент от шаблона, може би за да избегнете излишни divs - преди също се дразнех от това, има начини да го заобиколя, но е хакерско и възникват проблеми около повторното изобразяване, обвързване на събития и nt работят за шаблони, които нямат родителски елемент - за мен това предизвика усложнения до точката, в която вече приех divs и продължих :)

Това е подход - Backbone, не this.el wrapping, но аз препоръчваме да приемете divs, ако искате да запазите идентификаторите и класовете в шаблони, все още можете да го направите.

person Dan W    schedule 03.09.2014

до @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