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;
}
从这里开始,你很好;但是我们仍然可以让它变得更好。为此,确保还取消选中 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
我试图解决类似的情况,并创建了一个额外的 table 作为查找。
我有一个 CATEGORY
的下拉列表,在主数据源的字段上设置了可能的选项。
然后我有第二个 table,有 2 列:CATEGORY
和 SUB_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();
可能有更有效的方法来执行此操作,但好处是我可以创建另一个表单页面并动态添加新的组合,因此不需要任何代码更改,因为需要新的组合。
假设:
假设我让某人点蛋糕,他们选择香草或巧克力,然后他们必须选择糖霜
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;
}
从这里开始,你很好;但是我们仍然可以让它变得更好。为此,确保还取消选中 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
我试图解决类似的情况,并创建了一个额外的 table 作为查找。
我有一个 CATEGORY
的下拉列表,在主数据源的字段上设置了可能的选项。
然后我有第二个 table,有 2 列:CATEGORY
和 SUB_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();
可能有更有效的方法来执行此操作,但好处是我可以创建另一个表单页面并动态添加新的组合,因此不需要任何代码更改,因为需要新的组合。