Skip to content

Data binding support #68

@XuNeo

Description

@XuNeo

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions