feat: Update event handling in sui/core to support event component names
This commit is contained in:
parent
5514fea7ec
commit
a2e5a52ad8
3 changed files with 29 additions and 21 deletions
|
|
@ -94,10 +94,12 @@ func GetEventScript(sequence int, sel *goquery.Selection, ns string, cn string,
|
|||
for name, handler := range events {
|
||||
if ispage {
|
||||
source += pageEventInjectScript(id, name, dataRaw, jsonRaw, handler) + "\n"
|
||||
sel.SetAttr("s:event-cn", "__page")
|
||||
} else {
|
||||
source += compEventInjectScript(id, name, cn, dataRaw, jsonRaw, handler) + "\n"
|
||||
sel.SetAttr("s:event-cn", cn)
|
||||
}
|
||||
sel.RemoveAttr(fmt.Sprintf("s:on-%s", name))
|
||||
// sel.RemoveAttr(fmt.Sprintf("s:on-%s", name))
|
||||
}
|
||||
|
||||
sel.SetAttr("s:event", id)
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ const initScriptTmpl = `
|
|||
const cn = element.getAttribute("s:cn");
|
||||
if (method && typeof window[cn] === "function") {
|
||||
try {
|
||||
window[cn](element);
|
||||
new window[cn](element);
|
||||
} catch (e) {
|
||||
const message = e.message || e || "An error occurred";
|
||||
console.error(` + "`[SUI] ${cn} Error: ${message}`" + `);
|
||||
|
|
@ -82,13 +82,17 @@ const i118nScriptTmpl = `
|
|||
`
|
||||
|
||||
const pageEventScriptTmpl = `
|
||||
document.querySelector("[s\\:event=%s]").addEventListener("%s", function (event) {
|
||||
if (document.querySelector("[s\\:event=%s]")) {
|
||||
let elms = document.querySelectorAll("[s\\:event=%s]");
|
||||
elms.forEach(function (element) {
|
||||
element.addEventListener("%s", function (event) {
|
||||
const dataKeys = %s;
|
||||
const jsonKeys = %s;
|
||||
const root = document.body;
|
||||
const target = this;
|
||||
__sui_event_handler(event, dataKeys, jsonKeys, target, root, %s);
|
||||
__sui_event_handler(event, dataKeys, jsonKeys, element, root, window.%s);
|
||||
});
|
||||
});
|
||||
}
|
||||
`
|
||||
|
||||
const compEventScriptTmpl = `
|
||||
|
|
@ -153,7 +157,7 @@ func headInjectionScript(jsonRaw string) string {
|
|||
}
|
||||
|
||||
func pageEventInjectScript(eventID, eventName, dataKeys, jsonKeys, handler string) string {
|
||||
return fmt.Sprintf(pageEventScriptTmpl, eventID, eventName, dataKeys, jsonKeys, handler)
|
||||
return fmt.Sprintf(pageEventScriptTmpl, eventID, eventID, eventName, dataKeys, jsonKeys, handler)
|
||||
}
|
||||
|
||||
func compEventInjectScript(eventID, eventName, component, dataKeys, jsonKeys, handler string) string {
|
||||
|
|
|
|||
|
|
@ -72,6 +72,7 @@ var allowUsePropAttrs = map[string]bool{
|
|||
"s:elif": true,
|
||||
"s:for": true,
|
||||
"s:event": true,
|
||||
"s:event-cn": true,
|
||||
"s:render": true,
|
||||
}
|
||||
|
||||
|
|
@ -80,6 +81,7 @@ var keepAttrs = map[string]bool{
|
|||
"s:cn": true,
|
||||
"s:ready": true,
|
||||
"s:event": true,
|
||||
"s:event-cn": true,
|
||||
"s:render": true,
|
||||
}
|
||||
|
||||
|
|
@ -863,7 +865,7 @@ func (parser *TemplateParser) Tidy(s *goquery.Selection) {
|
|||
// Remove the parsed attribute
|
||||
attrs := []html.Attribute{}
|
||||
for _, attr := range node.Attr {
|
||||
if strings.HasPrefix(attr.Key, "s:") && !keepAttrs[attr.Key] {
|
||||
if strings.HasPrefix(attr.Key, "s:") && !keepAttrs[attr.Key] && !strings.HasPrefix(attr.Key, "s:on-") {
|
||||
continue
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue