如何在应用制作工具数据源中设置当前项目?

bbx*_*bbx 3 google-app-maker

这看起来很基本,但我似乎无法弄清楚如何手动设置当前项目以从数据源使用?

举例说明:我有一个表格,我注意到当我选择一行来编辑一个字段时,该行的项目成为当前项目,所以如果我在该行上有一个导航到页面的链接,则该行的行选定的项目将是导航页面的 datasource.item。

但是,我也注意到,如果我只是将鼠标悬停在一行上,而不选择编辑字段,那么如果我单击导航到页面的链接,它会加载之前选择/编辑的任何行的数据。因此,我想知道如何使它只在鼠标上:悬停(或单击快捷方式而不事先单击行中的另一个字段) datasource.item 将更新为鼠标移过的行要求首先编辑行上的字段。我希望这是有道理的。

非常感谢您的帮助。谢谢!

Pav*_*nik 5

为什么会发生:

AM code: generate button click event
User code: handle button's click event
User code: navigate user to different page
AM code: destroy DOM of current page
AM code: build DOM for new page
-- dead code after this line
AM code: row click event handler
AM code: change datasource's current item
Run Code Online (Sandbox Code Playgroud)

Row 的 click 事件处理程序永远不会得到控制,因为 row 被用户的代码破坏了。

Morfinismo的解决方案有什么作用?

AM code: generate button click event
User code: handle button's click event
AM code: row click event handler
AM code: change datasource's current item
-- moved lines
User code: navigate user to different page
AM code: destroy DOM of current page
AM code: build DOM for new page
Run Code Online (Sandbox Code Playgroud)

以下是更多技术细节:事件循环

在 App Maker 中,这个问题可以解决

  1. 设置超时
  2. 强制更新用户代码中的当前项目
AM code: generate button click event
User code: handle button's click event
User code: navigate user to different page
AM code: destroy DOM of current page
AM code: build DOM for new page
-- dead code after this line
AM code: row click event handler
AM code: change datasource's current item
Run Code Online (Sandbox Code Playgroud)
  1. 自定义属性
AM code: generate button click event
User code: handle button's click event
AM code: row click event handler
AM code: change datasource's current item
-- moved lines
User code: navigate user to different page
AM code: destroy DOM of current page
AM code: build DOM for new page
Run Code Online (Sandbox Code Playgroud)
  1. URL 参数历史记录- 这种方法用于大多数模板应用程序,因为它也在一定程度上实现了深度链接。
// button's onClick event handler
app.datasource.ListDatasource.selectKey(widget.datasource.item._key);
Run Code Online (Sandbox Code Playgroud)
  1. 使用全局范围在页面之间传递值
// button's onClick event handler
app.pages.ShowMeNext.properties.Key = widget.datasource.item._key;
app.showPage(app.pages.ShowMeNext);

// next page's onAttach event handler
app.datasources.RecordDatasource.filters._key._equals = app.currentPage.properties.Key;
app.datasources.RecordDatasource.load();
Run Code Online (Sandbox Code Playgroud)

ListDatasource - 列表/网格/表数据源

RecordDatasource - 专用于特定记录的数据源(单记录数据源)

  • 有趣的分析。现在我知道幕后发生了什么。谢谢。 (2认同)