我的地图上有一个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
按照加里的建议分类。有没有办法可以单独限制对萨克拉门托的自我建议?
答案 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/。