在搜索结果之前修改搜索小组件值

时间:2015-09-30 13:21:31

标签: javascript arcgis esri

我的地图上有一个Search小部件。我想要做的是当用户键入时,比方说Foo,我想将1215 Bourboun St附加到该值,以便返回非常精确的结果。

我查看了文档,发现了一个Sacramento, US事件,它基本上让我可以使用返回的结果。但有没有我可以订阅的事件发生在搜索完成之前?这样我就可以在开始搜索之前修改搜索值。

我的代码如下:

search-results

更新

使用Gary的建议,我创造了一个小提琴,让你的专家帮助我解决这个问题。

案例场景:如果您开始输入map = new Map("mapDiv", { center: [xyz, abc], zoom: 10, basemap: "streets" }); var search = new Search({ map: map }, dom.byId("search")); search.startup(); search.on("search-results", populateHiddenField); . . . // some irrelevant code ,您会发现它会返回来自世界各地的结果,而不仅仅是萨克拉门托,即使我已经扩展了1215按照加里的建议分类。有没有办法可以单独限制对萨克拉门托的自我建议?

JSFIDDLE

1 个答案:

答案 0 :(得分:1)

更新:问题已被修改以启用建议而不是禁用它们,我已相应更新了我的答案。处理建议就像覆盖suggest方法一样简单,与search方法完全相同。

创建一个扩展Search并覆盖search函数的新类。

map = new Map("mapDiv", {
    center: [xyz, abc],
    zoom: 10,
    basemap: "streets"
});

//Define new class that inherits from Search
var MySearch = declare(Search, {
    //Override the search method
    search: function () {
        var originalValue = this.value;
        this.set("value", this.value + ", Sacramento, CA");
        var retVal = this.inherited(arguments);
        this.set("value", originalValue);
        return retVal;
    }

    //Override the suggest method
    suggest: function () {
        var originalValue = this.value;
        this.set("value", this.value + ", Sacramento, CA");
        var retVal = this.inherited(arguments);
        this.set("value", originalValue);
        return retVal;
    }
});           

var search = new MySearch({
    map: map,
    enableSuggestionsMenu:true,
    enableSuggestions:true,
    autoSelect:true,
    autoNavigate:true
}, dom.byId("search"));
search.startup();
search.on("search-results", populateHiddenField);

您需要在"dojo/_base/declare"列表中加入require

有关扩展Dojo类的更多详细信息,请参阅http://dojotoolkit.org/documentation/tutorials/1.10/declare/