初始化
This commit is contained in:
45
demo/mvvm/model.py
Normal file
45
demo/mvvm/model.py
Normal file
@@ -0,0 +1,45 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Model 层。
|
||||
|
||||
Model 负责保存业务数据。这个 demo 只有一个字符串模型 StringModel,
|
||||
它保存一条日志文本;当日志文本被修改时,会向事件通道发布通知。
|
||||
"""
|
||||
from mvvm.framework import fw_proxy, BaseModel
|
||||
|
||||
|
||||
class StringModel(BaseModel):
|
||||
"""字符串数据模型:保存一个字符串,并在值改变时发布事件。"""
|
||||
|
||||
def __init__(self, topic: str, value: str):
|
||||
# topic 用于告诉框架:这个 Model 的变化应该发布到哪个主题。
|
||||
super().__init__(topic)
|
||||
# 真正保存字符串值的私有变量。
|
||||
self._string = value
|
||||
|
||||
@property
|
||||
def value(self):
|
||||
"""读取当前字符串值。"""
|
||||
return self._string
|
||||
|
||||
@value.setter
|
||||
def value(self, value: str):
|
||||
"""
|
||||
修改字符串值。
|
||||
|
||||
这是 MVVM 自动刷新的关键位置:只要业务代码给 model.value 赋值,
|
||||
Model 就会发布事件,View 会在订阅到事件后自动刷新。
|
||||
"""
|
||||
self._string = value
|
||||
fw_proxy.channel.publish(self._topic, value)
|
||||
|
||||
def signal_proxy(self, value: str):
|
||||
"""
|
||||
接收 View 反向传来的值。
|
||||
|
||||
在双向绑定场景中,如果 View 发布了自己的变化,框架会调用这里,
|
||||
从而把 View 的新值同步回 Model。
|
||||
"""
|
||||
super().signal_proxy()
|
||||
self._string = value
|
||||
Reference in New Issue
Block a user