更新mvvm示例
This commit is contained in:
87
extensions/cocos/cocos-ecs/assets/scripts/mvvm/TestView.ts
Normal file
87
extensions/cocos/cocos-ecs/assets/scripts/mvvm/TestView.ts
Normal file
@@ -0,0 +1,87 @@
|
||||
import { _decorator, Component, Label, Button } from 'cc';
|
||||
import { DataBinding, BindingType, BindingMode } from '@esengine/mvvm-ui-framework';
|
||||
import { TestViewModel } from './TestViewModel';
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass('TestView')
|
||||
export class TestView extends Component {
|
||||
|
||||
@property(Label)
|
||||
testLabel: Label = null!;
|
||||
|
||||
@property(Button)
|
||||
testButton: Button = null!;
|
||||
|
||||
private viewModel: TestViewModel;
|
||||
private dataBinding: DataBinding;
|
||||
private bindingId: string = '';
|
||||
|
||||
onLoad() {
|
||||
console.log('TestView onLoad');
|
||||
|
||||
// 初始化数据绑定系统
|
||||
this.dataBinding = DataBinding.getInstance();
|
||||
|
||||
// 创建 ViewModel
|
||||
this.viewModel = new TestViewModel();
|
||||
console.log('创建 ViewModel:', this.viewModel);
|
||||
|
||||
// 手动添加观察者来测试
|
||||
this.viewModel.addObserver('testValue', (newValue, oldValue, property) => {
|
||||
console.log(`属性 ${property} 变化: ${oldValue} -> ${newValue}`);
|
||||
if (this.testLabel) {
|
||||
this.testLabel.string = '测试值: ' + newValue;
|
||||
console.log('手动更新 Label 文本:', this.testLabel.string);
|
||||
}
|
||||
});
|
||||
|
||||
// 设置数据绑定
|
||||
this.setupDataBinding();
|
||||
|
||||
// 设置按钮事件
|
||||
this.setupButtonEvent();
|
||||
|
||||
// 测试初始值
|
||||
console.log('初始值:', this.viewModel.testValue);
|
||||
}
|
||||
|
||||
private setupDataBinding(): void {
|
||||
if (this.testLabel) {
|
||||
console.log('设置数据绑定');
|
||||
console.log('Label 对象:', this.testLabel);
|
||||
console.log('Label 初始文本:', this.testLabel.string);
|
||||
|
||||
this.bindingId = this.dataBinding.bind(this.viewModel, this.testLabel, {
|
||||
type: BindingType.ONE_WAY,
|
||||
mode: BindingMode.FORMAT,
|
||||
source: 'testValue',
|
||||
target: 'string',
|
||||
format: '测试值: {0}'
|
||||
});
|
||||
console.log('绑定ID:', this.bindingId);
|
||||
|
||||
// 手动测试一下绑定是否工作
|
||||
this.testLabel.string = '测试值: ' + this.viewModel.testValue;
|
||||
console.log('手动设置后的文本:', this.testLabel.string);
|
||||
}
|
||||
}
|
||||
|
||||
private setupButtonEvent(): void {
|
||||
if (this.testButton) {
|
||||
this.testButton.node.on(Button.EventType.CLICK, () => {
|
||||
console.log('按钮点击');
|
||||
this.viewModel.addValue();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
onDestroy() {
|
||||
if (this.bindingId) {
|
||||
this.dataBinding.unbind(this.bindingId);
|
||||
}
|
||||
if (this.viewModel) {
|
||||
this.viewModel.destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user