基于typescript修饰器的mvvm数据绑定方案

个人项目已经基于开始使用了

可以可以 …………666

UI配置数据非常人性话,非常适合普通用户。

主要的是扩展性和复用性,这两个才是重点,不论什么实现方式,最早论坛的那个 mvvm 扩展是比较困难的,还需要看源码,我这个只需要 copy 个方法就行了

  • data & setData 有点如鲠在喉的感觉…

我也有个类似框架, View 和 ViewModel 彻底分离, 理论上 整个 app 的 vm 层可以脱离 view 独立运行 (也不依赖 cc).

我一直对 Proxy 的性能持怀疑, 所以我的框架基于 rxjs.

@ccclass
export class LoadingPageView extends VmViewBase<LoadingPageViewModel>
{
    @vmBindIts('progress')
    @bindIts('node.active', _=> Orient.isH$)
    @type(ProgressBar) progress = null;

    @vmBindIts('string', vm => vm.progress$.pipe(map(percentify)) )
    @type(Label) loading = null;

    @assignIts('string',_=>'v' +R.VERSION)
    @type(Label) ver = null;

    @vmBindClick()
    @type(Button) cancel = null;
}
1赞

cc 编辑器里绑定数据 - 虽然用的时候爽, 但后续维护和迁移起来…不好说…

我更愿意一个 view 的所有绑定, 在一个声明式(比如装饰器) 的脚本中. 比如将来想把 cc 换成 laya, 脚本只需稍作改动就可以直接用了.

效率如何。虽然用了微信小程序的mvvm这种模式。但是在游戏里应用。对游戏性能影响如何。

我的监听器两种都支持,只不过我自己更喜欢编辑器而已。而且编辑器可以通过字符串全局替换,虽然比代码全局修改麻烦点

值得去思考,脱离view层的 我能想到的是,需要去做一个view代理。让这个view代理去抹平不同平台的view,ccc需要对应的实现的,laya也是

大佬,你测试下,在微信小游戏里运行,好像有点问题,我使用你github上的项目,拉下来,再微信小程序是有报错,我自己项目里,图片加载也有问题

好的 看看情况

已修复 :grinning:

proxy 好像不是都支持吧

微信里 eval和new function不支持,proxy是低版本的客户端兼容问题,最新的应该都支持了

https://caniuse.com/?search=proxy

大佬。image 这句话我有点没明白是找的组件还是组件下的节点。
image
image
这样没找到Label组件,。

image
image
这样就能找到

看明白了,

书写有误 :sweat_smile:

你这个 ScrollView,Layout里面添加数据。好像是加一个数据,全部数据都刷新一遍。数据多了,加一个数据就卡了。背包里面的东西一般都需要添加或者删除的吧。这有没有什么解决的办法?

动态的一些东西根本就不适合,这些通过数据驱动UI的框架其实都是不咋地适合稍微复杂一丢丢的逻辑,真的只适合非常简单的一些逻辑才会只更新1-2个UI(比如幼儿教育app那种),其实每次更新数据,要更新的ui非常多,但是数据关联的UI却不一定都需要更新,而且即使需要更新,还要判断多种条件下进行不同的UI更新等等,如果看不明白的话,只能说多写2行代码你就知道了。
所以通过数据驱动UI的框架都是只能解渴,但是并不能靠他充饥