根据此link,我们可以执行基于Google可视化类别选择器控件的功能。现在我正在尝试基于下面给出的三个控件构建相同类型的where子句。
var whereClause1;
var control1, control2, control3;
function drawVisualization() {
// etc.
control1 = // etc...
control2 = // etc...
control3 = // etc...
// Register to hear state changes.
google.visualization.events.addListener(control1, 'statechange', foo1);
google.visualization.events.addListener(control2, 'statechange', foo2);
google.visualization.events.addListener(control3, 'statechange', foo3);
// etc.
}
function foo1() {
var whereClauses = [];
if (control1.getState().selectedValues == '') {
whereClauses.push("Something")
}
else if (control1) {
whereClauses.push("Something1 = '" +control1.getState().selectedValues+ "'")
}
whereClause1 = whereClauses;
dothis();
}
function foo2() {
var whereClauses = [];
if (control2.getState().selectedValues == '') {
whereClauses.push("Something1 = '" +control1.getState().selectedValues+ "'")
}
else if (control2) {
whereClauses.push("Something2 = '" +control2.getState().selectedValues+ "'")
}
whereClause1 = whereClauses;
dothis();
}
function foo3() {
var whereClauses = [];
if (control3.getState().selectedValues == '') {
whereClauses.push("Something2 = '" +control2.getState().selectedValues+ "'")
}
else if (control3) {
whereClauses.push("Something3 = '" +control3.getState().selectedValues+ "'")
}
whereClause1 = whereClauses;
dothis();
}
function dothis() {
whereClause += " AND " + whereClause1;
}
如何使用一些循环将三个函数合并到一个函数foo
中?
编辑:查找我的示例fiddle here。
在示例中,当我在第1列中选择“A”时,where子句应取值column0 = 'Home' AND column1 = 'A'
,当我在第2列中选择“bar”时,where子句应取值column0 = 'Home' AND column1 = 'A' AND column2 = 'bar'
如果我分别在column2和column3中选择'bar'和'200',那么where子句应该取值column0 = 'Home' AND column2 = 'bar' AND column3 = '200'
,依此类推。
它也采取相反的顺序。也就是说,当我在第2列中选择“选择值”时,where子句应该采用仅在第1列中设置的值。我尝试了以下内容:
function foo() {
var whereClauses = [];
if (control1.getState().selectedValues == '') { whereClauses.push("") }
if (control1) { whereClauses.push("Column1 = '" +control1.getState().selectedValues+ "'") }
if (control2.getState().selectedValues == '') { whereClauses.push("Column1 = '" +control1.getState().selectedValues+ "'") }
if (control2) { whereClauses.push("Column2 = '" +control2.getState().selectedValues+ "'") }
if (control3.getState().selectedValues == '') { whereClauses.push("Column2 = '" +control2.getState().selectedValues+ "'") }
if (control3) { whereClauses.push("Column3 = '" +control3.getState().selectedValues+ "'") }
whereClause1 = whereClauses.join(" AND ");
dothis();
}
但没用。
答案 0 :(得分:0)
如果我正确理解您的要求,此功能应该按照您的要求执行:
function getWhereClause () {
var selectedValues1 = control1.getState().selectedValues;
var selectedValues2 = control2.getState().selectedValues;
var selectedValues3 = control3.getState().selectedValues;
var whereClauses = ["column0 = 'Home'"];
if (selectedValues1.length) {
whereClauses.push("Column1 = '" + selectedValues1[0] + "'");
}
if (selectedValues2.length) {
whereClauses.push("Column2 = '" + selectedValues2[0] + "'");
}
if (selectedValues3.length) {
whereClauses.push("Column3 = '" + selectedValues3[0] + "'");
}
var whereClause = whereClauses.join(' AND ');
// do something with whereClause
alert(whereClause);
}
请参阅此处的工作示例:http://jsfiddle.net/asgallant/zrjnh/