{"id":16203441,"url":"https://github.com/chexiongsheng/xuui","last_synced_at":"2025-05-08T21:10:29.527Z","repository":{"id":45143528,"uuid":"158360086","full_name":"chexiongsheng/XUUI","owner":"chexiongsheng","description":"xLua的mvvm框架，支持ugui，ngui，fairyGUI。。。","archived":false,"fork":false,"pushed_at":"2018-12-06T12:33:22.000Z","size":5089,"stargazers_count":269,"open_issues_count":3,"forks_count":51,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-03-31T18:17:16.671Z","etag":null,"topics":["framework","lua","mvvm","unity","vue","xlua"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chexiongsheng.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-11-20T09:02:18.000Z","updated_at":"2024-11-28T02:17:46.000Z","dependencies_parsed_at":"2022-07-13T16:50:29.307Z","dependency_job_id":null,"html_url":"https://github.com/chexiongsheng/XUUI","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chexiongsheng%2FXUUI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chexiongsheng%2FXUUI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chexiongsheng%2FXUUI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chexiongsheng%2FXUUI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chexiongsheng","download_url":"https://codeload.github.com/chexiongsheng/XUUI/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253149615,"owners_count":21861739,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["framework","lua","mvvm","unity","vue","xlua"],"created_at":"2024-10-10T09:54:10.130Z","updated_at":"2025-05-08T21:10:29.509Z","avatar_url":"https://github.com/chexiongsheng.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# XUUI\r\n\r\n基于xLua的轻量级UI框架。\r\n\r\n## 两大核心能力\r\n\r\n* 支持MVVM的单/双向绑定\r\n* 应用框架：模块加载，模块刷新（reload）、模块间（数据）隔离、模块间可控交互\r\n\r\n## 科普MVVM\r\n\r\n* mvvm框架，支持你在UI上设置一些绑定路径，比如：info.name ，select啥的，然后你在逻辑代码那修改info.name ，所有绑定到info.name的UI组件都会**自动**发生变化，这是单向绑定。\r\n* mvvm框架还支持双向绑定：比如输入框绑定到info.name ，那么这个输入框的输入会自动修改info.name ，进而导致所有其它绑定到info.name 的UI组件都会自动发生变化。\r\n\r\n## 特点\r\n\r\n* 可以和任意UI库配合，ugui，ngui，fairyGUI，你自己倒腾的UI库。。。Whatever you want\r\n* 支持把本框架作为一个mvvm驱动器，纯用C#写逻辑\r\n* 支持“计算属性”：“计算属性”依赖的各属性发生改变会触发“计算属性”的重计算\r\n* 可随时绑定View以及解绑定\r\n\r\n## 示例\r\n\r\n### 设置绑定信息\r\n\r\n怎么操作？添加添加适配器（继承自MonoBehaviour）到GameObject，可以通过Component/XUUI菜单或者手动到XUUI\\Scripts\\UGUIAdapter目录找脚本拖放到GameObject，然后设置BindTo属性即可。\r\n\r\nHelloworld示例UI节点的绑定信息如下：\r\n\r\n* InputField: info.name\r\n* Text      : message，这是个“计算属性”，计算时用了info.name，当info.name发生变化会触发message重新计算，并自动更新Text。\r\n* Button    : click，这会绑定到一个click command上\r\n\r\n### 代码\r\n\r\n~~~csharp\r\npublic class Helloworld : MonoBehaviour\r\n{\r\n    Context context = null;\r\n\r\n    void Start()\r\n    {\r\n        context = new Context(@\"\r\n            return {\r\n                data = {\r\n                    info = {\r\n                        name = 'John',\r\n                    },\r\n                },\r\n                computed = {\r\n                    message = function(data)\r\n                        return 'Hello ' .. data.info.name .. '!'\r\n                    end\r\n                },\r\n                commands = {\r\n                    click = function(data)\r\n                        print(data.info.name)\r\n                    end,\r\n                },\r\n            }\r\n        \");\r\n\r\n        context.Attach(gameObject);\r\n    }\r\n\r\n    void OnDestroy()\r\n    {\r\n        context.Dispose();\r\n    }\r\n}\r\n~~~\r\n\r\n根据一个lua脚本去new一个Context，该脚本仅简单的返回一个table，该table各字段含义如下：\r\n\r\n* data就是ViewModle（VM）\r\n* computed中引用到的VM元素，在其依赖的VM元素发生改变会自动重新计算并同步到各个绑定了它（比如上例的message）的节点\r\n* commands是类似按钮点击事件绑定的响应方法\r\n\r\n然后就可以愉快的Attach到某个UI根节点了（可以Attach多个），这个UI跟节点设置了绑定信息的UI元素都会自动同步。\r\n\r\n## 应用框架\r\n\r\nHelloworld例子展现的是类似vue.js的能力，实际项目中，更建议以模块的方式来组织程序。XUUI提供的应用框架，能很好的实现模块间隔离，也能提供模块间的可控交互能力。\r\n\r\n详细请看[《应用框架》](Docs/App.md)以及配套的实例程序。\r\n\r\n## 例子说明\r\n\r\n* Helloworld.unity: 快速入门的例子。\r\n* MoreComplex.unity: 演示混合使用lua，C#静态函数，C#成员函数作为事件响应，演示怎么监听一个数组的变化并应用到UI元素上。\r\n* NoLua.unity: 演示不使用lua，把本框架作为一个mvvm驱动器，纯用C#写逻辑。\r\n* TestDetach.unity: 演示随意地挂载/卸载UI到一个ViewModel上。\r\n* App.unity: 演示应用框架怎么使用。\r\n\r\n## 怎么支持各种UI\r\n\r\n详细请看[《如何和任意UI库适配》](Docs/GuiAdapter.md)\r\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchexiongsheng%2Fxuui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchexiongsheng%2Fxuui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchexiongsheng%2Fxuui/lists"}