【问题标题】:dijit/form/select to select search fields in Arc JS APIdijit/form/select 在 Arc JS API 中选择搜索字段
【发布时间】:2015-08-12 11:17:41
【问题描述】:

我是 javascript、dojo 和 HTML 的新手,我到处搜索这方面的示例,但找不到任何示例。

我有一张带有一些特征点的地图和一个查找任务,以突出显示地图上的特征点,并将它们显示在带有其字段属性的网格中。当我将搜索字段指定为:

findParams.searchFields = ["LOCATION"];

但如果我添加:

findParams.searchFields = ["LOCATION", "MODEL_NUM"];

网格显示来自多个字段的结果(即,在 LOCATION“A”中搜索属性也会在 MODEL_NUM 中找到包含字母“A”的属性)。所以我决定添加一个下拉菜单选择来指定要搜索的字段(一次一个),以便结果更精确。

所以我添加了以下dijit:

<select id="fieldSelect" data-dojo-type="dijit/form/Select" name="fieldSelect">
          <option value="" selected="selected">Select a field</option>
          <option value="MODEL_NUM">Model Number</option>
          <option value="LOCATION">Location</option>
          <option value="NUM_DEFICIENCIES">Number of Deficiencies</option>
          <option value="INSTALL_DATE">Install Date</option>
</select>

然后我将搜索字段语句修改为:

findParams.searchFields = "[" + "\"" + dom.byId("fieldSelect").value +
"\"" + "]";

当我点击我的搜索按钮时,我得到一个 Uncaught TypeError: a.join is not a function (FindParameters.js:5)

我希望这是足够的信息。有人有解决方案或建议吗?

更新

在向 findParams.searchFields 传递数组而不是字符串的建议后,我进行了以下更改:

findParams.searchFields = [];  
findParmas.searchFields.push(dom.byId("fieldSelect").value);

这仍然给了我来自多个字段的属性结果。运行几个小测试后:

var selectedField = document.getElementById('fieldSelect').value;
var index = selectedField.options[selectedField.selectedIndex].value;

还有:

var selectedField = dom.byId('fieldSelect').value;

我发现在 Chrome 开发人员工具调试器中,当我在该行创建断点并执行语句时,两个示例的 selectedField 值都为“未定义”。

这是没有从下拉选择 dijit 中获取值的问题吗?

如果没有向 findParams.searchFields 传递任何值,API 会假定所有字段都有效,这就是我从多个字段获取属性结果的原因。

谢谢。

【问题讨论】:

    标签: arcgis arcgis-server arcgis-js-api


    【解决方案1】:

    使用dijit.byId 而不是dom.byId

    以下对我有用:

    var value = dijit.byId("fieldSelect").value;
    if ("" != value) {
      findParams.searchFields = [value];
    } else {
      findParams.searchFields = ["MODEL_NUM", "LOCATION", "NUM_DEFICIENCIES", "INSTALL_DATE"];
    }
    

    【讨论】:

      【解决方案2】:

      我发现了问题。

      最终是registry.byId 让我找到了答案,在我意识到searchFields 在错误的函数中而不是在我单击搜索按钮时调用的函数中之后,我不得不重新排列一些代码。

      但是在访问 dijit 时,唯一有效的是 registry.byId 访问 dijit 节点并将所选值的值传递到我的 searchFields。

      谢谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多