Appmaker 输入表单,根据较早的下拉选项更改选项

Appmaker Input Form, change options based on earlier dropdown choices

假设:

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

if vanilla: strawberry or buttercream   

if chocolate: mocha, dark chocolate or buttercream.

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

a) 有没有办法在选择第一个下拉列表后更改第二个下拉列表的绑定?

我猜您在数据源中设置了下拉列表 "possible value" 选项,并且您在 table.

中将这些字段作为字符串字段

快速而肮脏的方法是转到 Cake 下拉菜单,然后在 属性 Editor>Events>OnValueChange select Custom Action 上使用此代码

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'];
}

"Field"这里替换成你的糖霜下拉框的名字

同时转到 属性 糖霜下拉菜单的编辑器,并删除选项字段中的所有内容。

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

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

["Vanilla", "Chocolate"]

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

widget.value = "Vanilla";

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

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;

}

从这里开始,你很好;但是我们仍然可以让它变得更好。为此,确保还取消选中 secondaryDropdownallowNull 选项,然后我们需要在 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

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

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

然后我有第二个 table,有 2 列:CATEGORYSUB_CATEGORY

在报名表上,我在 CATEGORY_MATRIX 查找 table 中将 SUB_CATEGORY 下拉选项设置为 SUB_CATEGORY

然后,对于 CATEOGRY 下拉菜单上的 onValueEdit 事件,我有一个脚本可以根据 CATEGORY 下拉菜单的值重新加载 CATEGORY_MATRIX table 源in the query so when the CATEGORY is selected only valid SUB_CATEGORY options are shown in the second drop down.

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

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