我想在chooseQuery方法执行的最后调用search()函数,而search()要引用生成的输入框的值,然而我的代码程序每次执行的时候,当调用search()时,输入框中的值还未设进去,即每次得到的值是空的.但是设置输入框的方法明明在search()函数之后执行的。而我确定值有设进去。是不是和上下文有关?
/**
* @param data
* @return
*/
function chooseQuery(data)
{
var methodCount = dojo.query("input[type='radio']");
for (var i = 0; i < methodCount.length; i++)
{
if (methodCount[i].checked)
{
var optionValue = methodCount[i].value;
// queryName是一个FilteringSelect 改变它的选项
queryName.attr("value",optionValue,false);
// 根据变化的选项值创建不同的输入框或下拉框
selectQuery();
// 初始化显示grid的面板
initGridPane();
// 将值设置到生成的输入框中
addElementToDialogById(optionValue,data);
queryName._lastValueReported=null;
dijit.byId("availableQueriesDialog").hide();
dijit.byId("queriedConcept").attr("style", "display:none;");
break ;
}
}
// 根据值进行查找
search();
}
selectQuery();的代码如下
function selectQuery()
{
intiParamPane();
var datatr = dojo.byId("datatr");
qnStore.fetch
(
{
// search items by condition
query :
{
name :queryName.value
},
onComplete : function(items, request)
{
if ((qnStore.getValues(items[0],"parameter")).length > 0)
{
var properties = qnStore.getAttributes(items[0]);
// hold all of the values for the parameter
var parameters = qnStore.getValues(items[0], properties[1]);
// hold all of the types for parameter
var types = qnStore.getValues(items[0], properties[2]);
// judge the parameter whether is needed
var requires = qnStore.getValues(items[0], properties[3]);
// if has regular
var regulars = qnStore.getValues(items[0], 'regular');
for (var i = 0; i < parameters.length; i++)
{
document.getElementById("inputDiv").setAttribute("class", "inputDiv");
if (types[i] == "array")
{
createSelectElement(datatr, parameters[i],requires[i], types[i]);
}
else
{
createInputElement(datatr, parameters[i], requires[i], regulars[i]); }
}
}
}
}
);
}
search()函数代码如下
function search()
{
var queryName = dojo.byId('queryName').value;
var flag = validateParameter(queryName);
if (flag)
{
return;
}
initGridPane();
var dialog = (dijit.byId("waitDialog") == null ? showWaitingDialog() : (dijit.byId("waitDialog"))) ;
dialog.show();
qnStore.fetch
({
// search items by condition
query :
{
name :queryName
},
onComplete : function(items, request)
{
var properties = qnStore.getAttributes(items[0]);
// hold all of the values for the parameter
var parameters = qnStore.getValues(items[0], properties[1]);
// hold every params
var params = "?method="+queryName;
for (var i = 0; i < parameters.length; i++)
{
var attribute = parameters[i];
var _value = dojo.byId(parameters[i]).value;
params += "&"+attribute+"="+_value;
}
console.log(browser_action_name + params);
dojo.xhrGet
(
{
handleAs: 'json',
url: browser_action_name + params,
load:showResult,
error:availableQueriesDialog
}
)
}
});
}
/**
* @param data
* @return
*/
function chooseQuery(data)
{
var methodCount = dojo.query("input[type='radio']");
for (var i = 0; i < methodCount.length; i++)
{
if (methodCount[i].checked)
{
var optionValue = methodCount[i].value;
// queryName是一个FilteringSelect 改变它的选项
queryName.attr("value",optionValue,false);
// 根据变化的选项值创建不同的输入框或下拉框
selectQuery();
// 初始化显示grid的面板
initGridPane();
// 将值设置到生成的输入框中
addElementToDialogById(optionValue,data);
queryName._lastValueReported=null;
dijit.byId("availableQueriesDialog").hide();
dijit.byId("queriedConcept").attr("style", "display:none;");
break ;
}
}
// 根据值进行查找
search();
}
selectQuery();的代码如下
function selectQuery()
{
intiParamPane();
var datatr = dojo.byId("datatr");
qnStore.fetch
(
{
// search items by condition
query :
{
name :queryName.value
},
onComplete : function(items, request)
{
if ((qnStore.getValues(items[0],"parameter")).length > 0)
{
var properties = qnStore.getAttributes(items[0]);
// hold all of the values for the parameter
var parameters = qnStore.getValues(items[0], properties[1]);
// hold all of the types for parameter
var types = qnStore.getValues(items[0], properties[2]);
// judge the parameter whether is needed
var requires = qnStore.getValues(items[0], properties[3]);
// if has regular
var regulars = qnStore.getValues(items[0], 'regular');
for (var i = 0; i < parameters.length; i++)
{
document.getElementById("inputDiv").setAttribute("class", "inputDiv");
if (types[i] == "array")
{
createSelectElement(datatr, parameters[i],requires[i], types[i]);
}
else
{
createInputElement(datatr, parameters[i], requires[i], regulars[i]); }
}
}
}
}
);
}
search()函数代码如下
function search()
{
var queryName = dojo.byId('queryName').value;
var flag = validateParameter(queryName);
if (flag)
{
return;
}
initGridPane();
var dialog = (dijit.byId("waitDialog") == null ? showWaitingDialog() : (dijit.byId("waitDialog"))) ;
dialog.show();
qnStore.fetch
({
// search items by condition
query :
{
name :queryName
},
onComplete : function(items, request)
{
var properties = qnStore.getAttributes(items[0]);
// hold all of the values for the parameter
var parameters = qnStore.getValues(items[0], properties[1]);
// hold every params
var params = "?method="+queryName;
for (var i = 0; i < parameters.length; i++)
{
var attribute = parameters[i];
var _value = dojo.byId(parameters[i]).value;
params += "&"+attribute+"="+_value;
}
console.log(browser_action_name + params);
dojo.xhrGet
(
{
handleAs: 'json',
url: browser_action_name + params,
load:showResult,
error:availableQueriesDialog
}
)
}
});
}
{
var queryName = dojo.byId('queryName').value;
if(queryName ==""){
setTimeout(search,10);
return;
}
var flag = validateParameter(queryName);
if (flag)
{
return;
}
}
1,queryName在chooseQuery方法中似乎是一个widget,取值的时候为什么不直接用queryName.attr("value")呢
2,selectQuery是一个异步的方法,queryName的值和onComplete的handler有关吗?如果有关的话就要把search的调用connect到qnstore的onComplete事件上面去
对啊,就是有关,但貌似我没有找到方法可以将search和onComplete 联系起来,毕竟onComplete是fetch函数的内部的方法