Skip to content

Commit 40210a5

Browse files
author
peter
committed
Add refreshable problem.
1 parent 372ee7a commit 40210a5

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

README_MORE.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1388,6 +1388,55 @@ ui.run(native=True)
13881388

13891389
修改`ui.run()`的默认参数`favicon`为自己logo的地址或者emoji字符`🚀`,例如:`ui.run(favicon='🚀')`
13901390

1391+
#### 4.3.2 ui.refreshable
1392+
1393+
1,为什么有时候创建在ui.refreshable装饰的函数内的控件不会刷新?
1394+
1395+
以下面代码为例:
1396+
1397+
```python3
1398+
from nicegui import ui
1399+
from datetime import datetime
1400+
1401+
@ui.refreshable
1402+
def time_box(container:ui.element):
1403+
with container:
1404+
ui.label(datetime.now())
1405+
1406+
card1 = ui.card()
1407+
time_box(card1)
1408+
1409+
ui.button('refresh1',on_click=time_box.refresh)
1410+
1411+
ui.run(native=True)
1412+
```
1413+
1414+
先创建了一个ui.card,然后给refreshable修饰的方法传入,在方法内部,想要通过`with container`的方法,在ui.card内部创建可以刷新的时间标签。然而,实际执行的时候就会发现,标签并没有如预期那样刷新,而是不断创建新的标签。
1415+
1416+
为什么?
1417+
1418+
其实,refreshable方法相当于创建了一个可刷新的元素,并将方法内部创建的元素的父元素指定为可刷新元素。每次调用刷新方法,实际上是先清空可刷新元素,然后执行一遍方法内部创建元素的过程。但是,使用`with container`之后,接下来创建的元素的父元素是container,而不是可刷新元素,因此,每次调用刷新方法之后,方法内部创建的元素不会被清空,反而因为重新创建了一遍元素,container下的元素会多一个。
1419+
1420+
如果想要实现借用已经创建的元素当容器,让内部元素可以刷新,就要在创建之前,模拟可刷新元素的清空操作:
1421+
1422+
```python3
1423+
from nicegui import ui
1424+
from datetime import datetime
1425+
1426+
@ui.refreshable
1427+
def time_box(container:ui.element):
1428+
container.clear()
1429+
with container:
1430+
ui.label(datetime.now())
1431+
1432+
card1 =ui.card()
1433+
time_box(card1)
1434+
1435+
ui.button('refresh1',on_click=time_box.refresh)
1436+
1437+
ui.run(native=True)
1438+
```
1439+
13911440
### 4.4 ui.button
13921441

13931442
1,想要在定义之后修改button的颜色,但是`bg-*`的tailwindcss样式没有用,怎么实现?

0 commit comments

Comments
 (0)