Edit: 似乎正确的值存储在 listWidget.children._values
而不是 listWidget.children
中 . 我觉得奇怪的是孩子们仍然会包含那些旧的行键和空值 .
我'm trying to create a list whose datasource is another datasource'项目的关系 . 例如:我有两个表,一个存储角色,另一个存储权限,我在角色和权限之间有一对多的关系 . roles
和 permissions
表都具有 name
属性 .
我有一个数据源 roles
的列表来选择一个角色 . 每行都有一个按钮,其中包含onClick事件的以下代码:
app.datasources.roles.selectKey(widget.datasource.item._key);
app.showPage(app.pages.listView);
我不确定这是否是最佳做法,但它将当前角色项设置为存储在 roles
list 's row'数据源键中的键 .
listView页面有另一个列表,这次有一个 @datasources.roles.item.permissions
的数据源来从当前角色's permissions. I then have a simple label to output that permission'的名称加载行 .
权限列表第一次加载就好了,列表小部件的子项包含正确的行,但是当您返回角色选择页面并单击另一个角色的按钮时,小部件似乎进入无效状态,其中子键保持为旧行和值为null . 我在行的onDataLoad上有一个事件来输出行窗口小部件,我可以看到新行正在加载并链接到父窗口小部件(列表本身)但是如果我回到该窗口小部件的子窗口,那么值仍然是空值 .
例如,假设我有两个角色:
key | name
===========
1 | role1
2 | role2
和以下权限:
key | name | role_fk
=====================
1 | perm1 | 1
2 | perm2 | 1
3 | perm3 | 2
当我单击按钮加载角色键 1
并显示它的权限列表时,我得到正确的列表:
Permission List:
================
perm1
perm2
当我检查列表小部件时,我也看到了正确的孩子: "List1Row$0", "List1Row$1"
. 但是,一旦我返回并单击加载角色键 2
我仍然有子项 "List1Row$0", "List1Row$1"
,它们的值为null,列表显示:
Permission List:
================
perm3
我知道正在创建 perm3
小部件,因为当它's attached. One strange thing is that it'的名称是 "List1Row$2"
时它打印到控制台,这表明旧的行值从未被清除 .
有人知道怎么修这个东西吗?我可以链接一个示例应用程序,它尽可能简单,同时仍然暴露问题 . 我不确定你是否能够使用项目关系作为列表数据源,或者我是如何选择我的数据源,项目和绑定的问题 .
这是一些额外的输出,列表被分离的点是我返回的位置,然后单击以将页面项目设置为第二个项目 .
Loaded row with name List1Row$0
Loaded row with name List1Row$1
Widget Child - Key: __gwt_instance Null? No
Widget Child - Key: _values Null? No
Widget Child - Key: List1Row$0 Null? No
Widget Child - Key: List1Row$1 Null? No
------- Detatching List -------
Loaded row with name List1Row$0
Loaded row with name List1Row$1
Loaded row with name List1Row$2
Widget Child - Key: __gwt_instance Null? No
Widget Child - Key: _values Null? No
Widget Child - Key: List1Row$0 Null? Yes
Widget Child - Key: List1Row$1 Null? Yes
谢谢 .
1 回答
您是否尝试使用item._load方法重新加载相关项?也许这会强制重新加载当前项目的相关项目 .
看这里:
https://developers.google.com/appmaker/scripting/api/client#Record
_load(回调:函数)
这也在Project Tracker模板应用程序中用于加载项目的历史记录(EditItem客户端脚本第100行) . 看这里:https://developers.google.com/appmaker/templates/project-tracker/