dijit / form / select在Arc JS API中选择搜索字段

时间:2015-05-29 14:25:34

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

我是javascript,dojo和HTML的新手,我到处搜索了这个例子并找不到。

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

时,这很有用
findParams.searchFields = ["LOCATION"];

但如果我补充:

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

网格显示来自多个字段的结果(即,在LOCATION&#34中搜索属性; 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不是一个函数(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的值设置为&#39; undefined&#39;。

这是一个没有从下拉列表中选择dijit的值的问题吗?

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

感谢。

2 个答案:

答案 0 :(得分:0)

使用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"];
}

答案 1 :(得分:0)

我发现了问题。

最终是registry.byId引导我得到了答案,在我意识到searchFields处于错误的功能而不是在我点击时调用的函数中时,我不得不重新安排一些代码搜索按钮。

但是当访问dijit时,唯一可行的是registry.byId来访问dijit节点并将所选值的值传递给我的searchFields。

感谢。