Appmaker输入表单,根据先前的下拉选项更改选项

时间:2019-06-26 21:30:30

标签: google-app-maker

假设的:

说我要某人点蛋糕,他们选择香草或巧克力,然后他们必须选择糖霜

class GroupIterator{
  constructor(group){
    this.group = group
    this.position = 0
  }

  next() {
    let result = {
      value: undefined,
      done: true,
    }

    if(this.position >= this.group.length){
      return result
    }

    result.value = this.group[this.position]
    result.done = false
    this.position++
    return result
  }
}

现在,数据模型中的结霜值可以接受所有四个选项,因此所有四个选项都显示在下拉列表中。

a)是否可以在选择第一个下拉菜单后更改第二个下拉菜单的绑定?

3 个答案:

答案 0 :(得分:2)

可以在不将数据保存在任何数据源中的情况下完成此操作。只需执行以下操作...

假设第一个下拉菜单名为 primaryDropdown ,第二个下拉菜单称为 secondaryDropdown 。在 primaryDropdown 选项中,设置以下内容:

["Vanilla", "Chocolate"]

此外,请确保取消选中选项 allowNull ,并在 onAttach 事件处理程序上放置以下内容:

widget.value = "Vanilla";

现在,我们进入 secondaryDropdown 。在这里,我们将进行绑定,因此将以下内容放置在options值中:

getAvailableOpts(@widget.root.descendants.primaryDropdown.value)

在客户端脚本中,我们需要确保该功能存在,因此请将以下内容粘贴到任何客户端脚本中:

function getAvailableOpts(primaryValue){

  var options;

  switch(primaryValue){
    case "Vanilla":
      options =["Strawberry","Buttercream"];
      break;
    case "Chocolate":
      options = ["Mocha","Dark Chocolate","Buttercream"];
      break;
    default:
      options = [];
  }

  return options;

}

从这里开始,你很好。但是,我们仍然可以使其更好。为此,请确保还取消选中 secondaryDropdown allowNull 选项,然后我们需要在 onValueChange 事件处理程序中添加一些逻辑 primaryDropdown

widget.root.descendants.secondaryDropdown.value = widget.root.descendants.secondaryDropdown.options[0];

参考文献:

https://developers.google.com/appmaker/ui/input-widgets#dropdown https://developers.google.com/appmaker/ui/binding#bindings https://developers.google.com/appmaker/scripting/client#use_scripts_in_binding_expressions

答案 1 :(得分:1)

我猜您在数据源中设置了下拉菜单“可能的值”选项,并且这些字段在表中只是字符串字段。

快速而肮脏的方法是转到Cake下拉菜单,然后在“属性编辑器”>“事件”>“ OnValueChange”中选择“自定义操作”并使用此代码

if(widget.value==="Vanilla"){
   widget.root.descendants.Field.options = ['Strawberry','Buttercream'];
}else if (widget.value === "Chocolate"){
  widget.root.descendants.Field.options = ['Mocha','Dark Chocolate','Buttercream'];
}

此处的“字段”被替换为您的糖霜下拉框的名称

还转到frostings下拉列表的属性编辑器,然后删除选项字段中的所有内容。

答案 2 :(得分:0)

我正试图解决类似的情况,并创建了一个额外的表作为查找。

我有一个CATEGORY的下拉菜单,在主数据源的字段上设置了可能的选项。

然后我有第二个表,该表包含2列:CATEGORYSUB_CATEGORY

在报名表上,我在SUB_CATEGORY查找表上将SUB_CATEGORY下拉菜单的选项设置为CATEGORY_MATRIX

然后在CATEOGRY下拉菜单上进行onValueEdit事件,我有一个脚本根据查询中CATEGORY_MATRIX下拉菜单的值重新加载CATEGORY表源,因此当已选择CATEGORY,仅第二个下拉列表中显示有效的SUB_CATEGORY选项。

var datasource = app.datasources.CATEGORY_MATRIX 
datasource.query.filters.CATEGORY._equals = newValue;
datasource.load();

也许有更有效的方法来执行此操作,但是好处是我可以创建另一个表单页面并动态添加新的组合,因此不需要任何代码更改,因为需要新的组合。