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

Modify Search Widget Value Before Searching for Results

本文关键字:小部 搜索 修改 搜索结果      更新时间:2023-09-26

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

我看了文档,发现了一个search-results事件,它基本上让我玩返回的结果。但是,在搜索完成之前是否存在一个我可以订阅的事件呢?这将使我能够在开始搜索之前修改搜索值。

我的代码如下:
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

根据Gary的建议,我创建了一个小提琴,让你们这些专家帮助我解决这个问题。

案例场景::如果您开始键入1215,您会注意到它返回来自世界各地的结果,而不仅仅是萨克拉门托,即使我根据Gary的建议扩展了Search类。我能不能把自动提示限制在萨克拉门托?

JSFIDDLE

UPDATE:问题已编辑为启用建议而不是禁用建议,我已相应地更新了我的答案。处理建议就像重写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);

你需要在你的require列表中包含"dojo/_base/declare"

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