在搜索结果之前修改搜索小部件值
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。有什么方法可以将自动建议限制在萨克拉门托吗?
更新: 编辑了问题以启用建议而不是禁用建议,我已经相应地更新了我的答案。处理建议就像以与 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。
我的地图上有一个 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。有什么方法可以将自动建议限制在萨克拉门托吗?
更新: 编辑了问题以启用建议而不是禁用建议,我已经相应地更新了我的答案。处理建议就像以与 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。