-
Couldn't load subscription status.
- Fork 0
NativeTextElement
oezingle edited this page Sep 27, 2025
·
2 revisions
NativeTextElement is a dumbed-down version of NativeElement, designed to handle exclusively text literals. Most UI frameworks view text literals differently than other elements, so text-specific custom logic can be encapsulated within a class that extends NativeTextElement.
(Pseudocode)
local MyNativeElement = NativeElement:extend("MyNativeElement")
function MyNativeElement:set_value(value: string)
function MyNativeElement:get_value(): stringlocal MyNativeElement = NativeElement:extend("MyNativeElement")
function MyNativeElement:insert_child (index, elem, is_text)
if is_text then
table.insert(self.text_children, index, elem)
else
...
end
end
function MyNativeElement:delete_child (index, is_text)
if is_text then
table.remove(self.text_children, index)
else
...
end
end
...
local MyText = NativeTextElement:extend("MyText")
function MyText:set_value (value)
self.value = value
-- this isn't the prettiest solution but that's alright
self.parent:_reload_text()
end
function MyText:get_value ()
return self.value
end
function MyNativeElement:_reload_text ()
local slices = {}
for _, text_elem in ipairs(self.texts) do
table.insert(slices, text_elem:get_value())
end
self:set_prop("text", table.concat(slices,""))
end
-- create_literal allows MyText instances to automatically be created by MyNativeElement
function MyNativeElement.create_literal (value, parent)
--- By default, NativeTextElement:init(value, parent) calls self:set_value(value) and sets self.parent to parent.
return MyText(value, parent)
end