mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
[FIX] slots: better heuristic to determine named slot content
Unfortunately, we chose to use the directive `t-set` to define sub slot contents in a template. The goal was to reuse a directive for a similar use case: defining sub template is almost the same as defining a slot content. Obviously, this introduces a name conflict: the inner content of a component cannot use t-set t-value anymore (nor t-set with a body value), since they are interpreted as slot names. We mitigate the issue here by only interpreting as slot content the `t-set` statement located immediately below the parent component tag name and with a body content. However, a real fix need to introduce an additional directive to resolve the ambiguity.
This commit is contained in:
@@ -400,7 +400,12 @@ QWeb.addDirective({
|
||||
|
||||
if (hasSlots) {
|
||||
const clone = <Element>node.cloneNode(true);
|
||||
const slotNodes = clone.querySelectorAll("[t-set]");
|
||||
const slotNodes: Element[] = [];
|
||||
for (let el of clone.children) {
|
||||
if (el.getAttribute("t-set") && el.hasChildNodes()) {
|
||||
slotNodes.push(el);
|
||||
}
|
||||
}
|
||||
const slotId = QWeb.nextSlotId++;
|
||||
ctx.addLine(`w${componentID}.__owl__.slotId = ${slotId};`);
|
||||
if (slotNodes.length) {
|
||||
|
||||
Reference in New Issue
Block a user