Merge pull request #745 from trheyi/main
[add] SUI real-time rendering mode supports event binding (page event only)
This commit is contained in:
commit
657224bff3
5 changed files with 98 additions and 87 deletions
120
data/bindata.go
120
data/bindata.go
File diff suppressed because one or more lines are too long
|
|
@ -33,13 +33,10 @@ func (page *Page) BindEvent(ctx *BuildContext, sel *goquery.Selection, cn string
|
||||||
// BindEvent is a method that binds events to the component in just-in-time mode.
|
// BindEvent is a method that binds events to the component in just-in-time mode.
|
||||||
func (parser *TemplateParser) BindEvent(sel *goquery.Selection, ns string, cn string) {
|
func (parser *TemplateParser) BindEvent(sel *goquery.Selection, ns string, cn string) {
|
||||||
sel.FindMatcher(eventMatcher).Each(func(i int, s *goquery.Selection) {
|
sel.FindMatcher(eventMatcher).Each(func(i int, s *goquery.Selection) {
|
||||||
script := GetEventScript(parser.sequence, s, ns, cn, "event-jit", false)
|
id := fmt.Sprintf("%s-%d", ns, parser.sequence)
|
||||||
if script != nil {
|
sel.SetAttr("s:event-jit", id)
|
||||||
script.Component = ""
|
ReplaceEventData(sel)
|
||||||
script.Parent = "body"
|
sel.SetAttr("s:event-cn", cn)
|
||||||
parser.scripts = append(parser.scripts, *script)
|
|
||||||
parser.sequence++
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,12 @@ func (parser *TemplateParser) parseJitComponent(sel *goquery.Selection) {
|
||||||
}
|
}
|
||||||
parser.parseElementComponent(comsel)
|
parser.parseElementComponent(comsel)
|
||||||
sel.ReplaceWithSelection(comsel)
|
sel.ReplaceWithSelection(comsel)
|
||||||
|
|
||||||
|
// Bind the events (support for the page event only, full support is in the feature)
|
||||||
|
ns := comsel.AttrOr("s:ns", "")
|
||||||
|
if ns != "" {
|
||||||
|
parser.BindEvent(comsel, ns, "__page")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (parser *TemplateParser) newJitComponentSel(sel *goquery.Selection, comp *JitComponent) (*goquery.Selection, error) {
|
func (parser *TemplateParser) newJitComponentSel(sel *goquery.Selection, comp *JitComponent) (*goquery.Selection, error) {
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,7 @@ var allowUsePropAttrs = map[string]bool{
|
||||||
"s:elif": true,
|
"s:elif": true,
|
||||||
"s:for": true,
|
"s:for": true,
|
||||||
"s:event": true,
|
"s:event": true,
|
||||||
|
"s:event-jit": true,
|
||||||
"s:event-cn": true,
|
"s:event-cn": true,
|
||||||
"s:render": true,
|
"s:render": true,
|
||||||
"s:public": true,
|
"s:public": true,
|
||||||
|
|
@ -83,6 +84,7 @@ var keepAttrs = map[string]bool{
|
||||||
"s:cn": true,
|
"s:cn": true,
|
||||||
"s:ready": true,
|
"s:ready": true,
|
||||||
"s:event": true,
|
"s:event": true,
|
||||||
|
"s:event-jit": true,
|
||||||
"s:event-cn": true,
|
"s:event-cn": true,
|
||||||
"s:render": true,
|
"s:render": true,
|
||||||
"s:public": true,
|
"s:public": true,
|
||||||
|
|
|
||||||
|
|
@ -166,8 +166,7 @@ function __sui_event_handler(event, dataKeys, jsonKeys, target, root, handler) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function __sui_event_init(elm: Element) {
|
function __sui_event_init(elm: Element) {
|
||||||
const eventElms = elm.querySelectorAll("[s\\:event]");
|
const bindEvent = (eventElm) => {
|
||||||
eventElms.forEach((eventElm) => {
|
|
||||||
const cn = eventElm.getAttribute("s:event-cn") || "";
|
const cn = eventElm.getAttribute("s:event-cn") || "";
|
||||||
if (cn == "") {
|
if (cn == "") {
|
||||||
console.error("[SUI] Component name is required for event binding", elm);
|
console.error("[SUI] Component name is required for event binding", elm);
|
||||||
|
|
@ -204,7 +203,9 @@ function __sui_event_init(elm: Element) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const comp = new window[cn](eventElm.closest(`[s\\:cn=${cn}]`));
|
const component = eventElm.closest(`[s\\:cn=${cn}]`);
|
||||||
|
// @ts-ignore
|
||||||
|
const comp = new window[cn](component);
|
||||||
const handler = comp[bind];
|
const handler = comp[bind];
|
||||||
const root = comp.root;
|
const root = comp.root;
|
||||||
const target = eventElm;
|
const target = eventElm;
|
||||||
|
|
@ -212,7 +213,12 @@ function __sui_event_init(elm: Element) {
|
||||||
__sui_event_handler(event, dataKeys, jsonKeys, target, root, handler);
|
__sui_event_handler(event, dataKeys, jsonKeys, target, root, handler);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
|
||||||
|
const eventElms = elm.querySelectorAll("[s\\:event]");
|
||||||
|
const jitEventElms = elm.querySelectorAll("[s\\:event-jit]");
|
||||||
|
eventElms.forEach((eventElm) => bindEvent(eventElm));
|
||||||
|
jitEventElms.forEach((eventElm) => bindEvent(eventElm));
|
||||||
}
|
}
|
||||||
|
|
||||||
function __sui_store(elm) {
|
function __sui_store(elm) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue