【问题标题】:dojo FilteringSelect from URL default valuedojo FilteringSelect from URL 默认值
【发布时间】:2014-11-26 10:20:00
【问题描述】:

您好,我有一个从 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>

【问题讨论】:

    标签: url dojo default-value


    【解决方案1】:

    使用 dojo.ready 并不能保证您正在获取的数据已准备好/已加载。当 dojo 准备好并且所有需要的资源都已加载时,它会触发。所以我认为您正在尝试将 FilteringSelect 设置为商店中尚不存在的值。您可以通过等待设置值直到商店准备好来解决这个问题。如何做到这一点取决于您使用的商店,我无法用您的代码真正弥补。我不熟悉 ComboBoxReadStore。经过一番谷歌搜索后,我发现它可能是 dojox.data.QueryReadStore 的扩展,它已过时且未完成。如果是这样,我建议您尽可能改用dojo.store。

    此外:dijits 上的 setValue 方法已弃用,您应该使用 set('key', val)。

    【讨论】:

    • 是的,但是一个简单的 URL 的功能并没有实现你输入的参数(或 ID)。看着 dojo.store 似乎我必须设置一个完全不同的架构来支持这一点,我没有找到太多的例子。
    • 我为你设置了一个小例子。使用 JsonRest 存储的 FilteringSelect 实际上比您目前所做的更容易:plnkr.co/edit/9WoWlE?p=preview(请注意该示例并不真正起作用,因为 plunker 显然无法返回 api 调用,但您可以检查检查员的网络窗口以查看它在工作中)
    猜你喜欢
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多