Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Data binding support #68

Open
XuNeo opened this issue Sep 4, 2024 · 0 comments
Open

Data binding support #68

XuNeo opened this issue Sep 4, 2024 · 0 comments

Comments

@XuNeo
Copy link
Owner

XuNeo commented Sep 4, 2024

Introduce the problem

LVGL already has subject/objserver available, but it's in a poor state:

  1. Every widget needs custom code in lvgl/src/others/observer/lv_observer.c
  2. Cannot create subject on the fly, it must be predefined.
  3. It has overlap with lv_obj_property
  4. C language needs lots of callbacks.

Proposal

We can use lua for the same idea.
Example of usage.

local subjectA = Subject()
local subjectB = Subject()

local obj = Object()
obj.w = subjectA
obj.h = Subject({subjectA, subjectB}, calculate = function(subjects) 
                            return subjects[0] + subjects[1] 
                            end
                           )

subjectA.value = 123

Under the hood, we monitor the value of a property set to obj in obj.__newindex meta method, bind the property to a subject.

Also monitor subject.__newindex meta method, call the obj.set method with subject's actual value.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant