您好我有一个可以从URL中读取的FilteringSelect。输入名称将查询数据库并返回相应的JSON以填充过滤选择,我可以选择一个值并存储该ID。
<div data-dojo-type="ComboBoxReadStore" data-dojo-id="assignedUserIdstore"
data-dojo-props="url:'Welcome.do?call=JS&actionRefId=142',
requestMethod:'get'"></div>
<input id='assignedUserId' name='value(assignedUserId)'
data-dojo-type='dijit.form.FilteringSelect'
data-dojo-props="store:assignedUserIdstore, pageSize:5, labelAttr:
'label',queryExpr: '*${0}*', autoComplete: false" />
问题在于设置默认值。我有这个
<script type='text/javascript'>dojo.ready(function(
{dijit.byId('assignedUserId').setValue('25');});
</script>
这似乎在一种方式之后起作用 - 它确实调用服务器并且服务器返回此
{“id”:“25”,“name”:“John Smith”“label”:“John Smith”}
然而,实际上没有显示输入的实际值也没有实际填充过滤选择。我试图将值设置为名称,但也没有效果。让它返回集合而不是单个项目也无济于事。
comboreadstore定义为
<script type="text/javascript">
require([
"dojo/_base/declare",
"dojox/data/QueryReadStore",
"dojo/parser",
"dijit/form/FilteringSelect"],
function(declare, QueryReadStore){
declare("ComboBoxReadStore", QueryReadStore, {
fetch:function(request) {
// This results in a xhr request to the following URL (in case of GET):
// /url.php?q=<searchString>
request.serverQuery = {q:request.query.name};
return this.inherited("fetch", arguments);
}
});
}
);
</script>
答案 0 :(得分:0)
使用dojo.ready并不能保证您提取的数据已准备好/已加载。当dojo准备好并且已加载所有必需的资产时,它会触发。所以我认为您正在尝试将FilteringSelect设置为商店中尚不存在的值。你可以通过等待设置值来解决这个问题,直到商店准备就绪。如何做到这一点取决于你正在使用的商店,我无法真正弥补你的代码。我不熟悉ComboBoxReadStore。经过一些谷歌搜索后我发现它可能是dojox.data.QueryReadStore的扩展,它已经过时且未完成。如果是这样,我建议您尽可能使用dojo.store。
此外:不推荐使用dijits上的setValue方法,您应该使用set('key',val)。