Google Appmaker:根据所选下拉选项更新表单

时间:2017-09-07 05:28:12

标签: google-app-maker

我有一个AppMaker应用程序,它基于一个地址表/数据源。我可以使用next / prev按钮获得一个表单,但是用一个名为的下拉列表替换了键字段(名称)(用户可以开始键入名称以跳转到那里,显示下拉列表)

我希望当用户从下拉列表中选择时,整个表单会更新,而下一个/上一个按钮也会正常工作(有太多记录可以通过next / prev进行分页) 。如果它太复杂了,我不必拥有next / prev功能。

目前下拉列表正在运行,但我无法获取下一个/上一个按钮设置的索引或表单的其余部分以反映所选的下拉记录。

我试图将“onValueEdit”事件设置为这样......

var selected = widget.value;
var idx      = widget.options.indexOf(selected);

console.log("Selected: "+selected+", index = "+idx+"\n");
if(idx < 0) {                      //...this error is never hit
  console.log("Index error - setting to zero!\n");
  idx = 0;
}
widget.datasource.loadPage(idx);   //...update form?

通过控制台记录进行两次观察:

  1. “idx”var永远不会可靠地设置为选定的下拉列表,而且是 经常“0”(没有错误消息显示),所以“indexOf()”函数 没有按预期工作。

  2. “已选择”的var(名称)始终是正确的。

  3. 如果我使用固定值(例如5)调用widget.datasource.loadPage(...),它对表单中显示的内容(之前加载的数据仍然存在)没有影响 - 显然不是这样做的方式:v /

    你能指导 noob 正确的方向吗?

3 个答案:

答案 0 :(得分:1)

如果您使用默认的App Maker表单,那么您可以看到所谓的pager,实际上并没有分页。它触发prevItem / nextItem数据源方法,换句话说,它导航数据源项而不是页面。以下是App Maker文档的引用:

  

nextItem:选择下一个项目。对于Query Datasources,如果当前项目是页面上的最后一项,则会加载下一页并选择新加载页面上的第一项。

因此,如果您已经加载了所有项目(将数据源的query page size设置为0),那么您只需更改数据源中的选定项目:

// onValueEdit dropdown event 
// assuming, that form and dropdown share same datasource
widget.datasource.selectKey(newValue._key);

如果你真的有很多物品,并且在一次通话中加载所有物品是不可行的......那么这将是另一个故事......

答案 1 :(得分:0)

我删除了此页面并重新启动,并使用下拉列表替换了默认的商家名称数据字段,我将下拉列表设置为:

Options: @datasources.Addresses.items 

Value: @datasources.Addresses.item

工作正常吗?!不确定我的原始页面发生了什么!

<强>更新 因此,您似乎需要删除值和选项,然后重新输入这些。当你这样做时,OK会亮起。

另外,我对App Maker的最初看法是构建UI并附加数据。那是我的第一个错误。您构建数据,然后让App Maker构建编辑/添加页面。

答案 2 :(得分:0)

<强>更新 设置选项非常重要,如下图所示!

AppMaker Dropdown Settings

然而,我无法以这种方式设置 (读取:浪费时间!)直到我使用更多选项完全擦除它们绑定选项列表,并再次尝试(我甚至尝试过一个全新的应用程序!)。我被迫选择 .. projection .. 然后在 OK 按钮可用之前的最后一个字段。

不确定AppMaker是否有错误或有一些简单的我不理解!

我的原始问题中的编码都不是必需的。 一旦这样设置,绑定就像你期望的那样工作! 所有其他字段都设置为 @ datasource.item。并绑定到所选的任何项目。 事件设置对于下拉列表也是必需的,正如我认为的那样。