假设的:
说我要某人点蛋糕,他们选择香草或巧克力,然后他们必须选择糖霜
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)是否可以在选择第一个下拉菜单后更改第二个下拉菜单的绑定?
答案 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列:CATEGORY
和SUB_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();
也许有更有效的方法来执行此操作,但是好处是我可以创建另一个表单页面并动态添加新的组合,因此不需要任何代码更改,因为需要新的组合。