8

主题

1

回帖

349

积分

优秀创作者

积分
349
发表于  2023-6-20 18:46:33 | 显示全部楼层 |阅读模式 3901 4

MVVM的核心。它的作用是监听属性变化,当修改了model数据源里面的数据时,自动调用回调函数

---@class binding
binding = {}
---@alias binding_fun fun(val:any, old:any):void

-- ---绑定监听数据
---local b= binding.bindable(init)
---binding.watch(b,'属性',func)
---b.属性=值 即可触发 func


function binding.bindable(init)
    local t = {}
    local mt
    mt = {
        bind____ = {},
        maxn____ = {}, -- no table.maxn in lua5.3

        __index = function(table, key)
            return mt[key]
        end,

        __newindex = function(table, key, value)
            local v_old = mt[key]
            -- if v_old == value then
            --     return
            -- end
            mt[key] = value
            local binds = mt.bind____[key]
            if binds~=nil then
                local maxn = mt.maxn____[key]
                for i = 1, maxn do
                    local v = binds[i]
                    if type(v) == "function" then
                        v(value, v_old)
                    end
                end
            end
        end
    }
    setmetatable(t, mt)
    if type(init) == "table" then
        for k, v in pairs(init) do
            t[k] = v
        end
    end
    return t
end

function binding.watch(table, key, func)
    local binds = table.bind____
    local maxns = table.maxn____
    if not binds[key] then
        binds[key] = {}
        maxns[key] = 0
    end
    local bind = binds[key]
    local tag = #bind + 1
    bind[tag] = func
    if tag > maxns[key] then
        maxns[key] = tag
    end
    return tag
end

function binding.unwatch(table, key, tag)
    local binds = table.bind____
    if binds[key] then
        binds[key][tag] = nil
    end
end

11

主题

10

回帖

649

积分

优秀创作者

积分
649
发表于  2023-6-20 18:48:00 | 显示全部楼层
来支持一下光头

0

主题

3

回帖

52

积分

普通创作者

积分
52
发表于  2023-6-20 18:48:31 | 显示全部楼层
跟大佬学习一下

53

主题

102

回帖

2369

积分

精英创作者

积分
2369

夏日·活跃之王勋章

发表于  2023-6-20 18:54:20 | 显示全部楼层
积分+1,你现在是优秀作者了

3

主题

70

回帖

280

积分

管理员

【问题收集】

积分
280
发表于  2023-6-21 14:32:38 | 显示全部楼层
KA}JC5CTETB2(1ADDNHP@]1.png

求大佬补充点这个lua是干啥的介绍或配图呀,我等着给你加精呢
给大佬按摩.gif