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

Modify Search Widget Value Before Searching for Results

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

我查看了文档并找到了一个 search-results 事件,它基本上让我可以使用 returned 结果。但是有没有我可以订阅的事件发生在搜索完成之前?这将使我能够在开始搜索之前修改搜索值。

我的代码如下:

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 的建议,我创建了一个 fiddle 让各位专家帮我解决这个问题。

案例场景::如果您开始输入 1215,您会注意到它 returns 来自世界各地,而不仅仅是萨克拉门托尽管我根据 Gary 的建议扩展了 Search class。有什么方法可以将自动建议限制在萨克拉门托吗?

JSFIDDLE

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


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

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/。class。