远程加载下拉选项时,语义 UI 不会替换 GET 路由中的 {value}
Semantic UI doesn't replace the {value} in a GET route when loading dropdown options remotely
这是我的 API 设置:
//-------------------------------------------------------------------------
// Define API endpoints once globally.
//-------------------------------------------------------------------------
$.fn.api.settings.api = {
'find cool cats' : '/search/coolcats?query={value}'
};
路由 returns 正确的 JSON 响应 as per the documentation:
// For example, "http://localhost:3000/search/coolcats?query=cool" returns this limited array of results:
{
"success": true,
"results": [
{
"name": "Cool Cat Cooper",
"value": "Cool Cat Cooper"
},
{
"name": "Cool Cat Charlie",
"value": "Cool Cat Charlie"
},
{
"name": "Cool Cat Mittens",
"value": "Cool Cat Mittens"
}
]
}
我在某个时候将此 HTML 附加到表单中(它与上面文档参考中的相同 "Favorite Animal" 代码):
var coolCatsField = '<div class="field">';
coolCatsField += '<label>Find a cool cat:</label>';
coolCatsField += '<div class="ui fluid search selection dropdown cool_cat_search">';
coolCatsField += '<input type="hidden">';
coolCatsField += '<i class="dropdown icon"></i>';
coolCatsField += '<input type="text" class="search" tabindex="0">';
coolCatsField += '<div class="default text">';
coolCatsField += 'Start typing to search or add';
coolCatsField += '</div>';
coolCatsField += '<div class="menu" tabindex="-1"></div>';
coolCatsField += '</div>';
coolCatsField += '</div>';
$('#someFormField') // Is a <div class="field">...</div> as well.
.after(coolCatsField);
并使用 API 设置初始化 .dropdown():
$('.cool_cat_search').dropdown({
apiSettings : {
action : 'find cool cats',
throttle : 500
}
});
语义 UI 应该 append route value automatically,但它显然不适用于下拉菜单,我得到一个错误:
API: Missing a required URL parameter: value /search/coolcats?query={value}
我试过的
添加一个urlData属性;结果它会将 {value} 替换为一个空字符串,因为 jQuery 的 .val() 即使里面有很多字符也无法捕捉到任何东西.search 输入(我确保它在每个字符后都连接到服务器)。不过,之后在控制台中触发 .val() 会返回我在字段中输入的任何内容。
$('.cool_cat_search')
.dropdown() // I think it should be initialized first for .val() to work.
.dropdown({
apiSettings : {
action : 'find cool cats',
throttle : 500,
urlData : {
value : $('.cool_cat_search .search').val()
}
}
});
当然,我也试过看看它是否总体上有效,并且它在所有前端的花里胡哨的地方都起到了应有的作用:
$('.cool_cat_search')
.dropdown({
apiSettings : {
action : 'find cool cats',
throttle : 500,
urlData : {
value : 'cool'
}
}
});
我还尝试使用语义 UI 的方法来获取值,而不是 jQuery 的 .val() 在 urlData 属性,运气不好。我根本不明白它是如何工作的,事实上,也许我应该在 .search 输入上初始化它,但无论哪种方式,它 returns 一个空字符串或一个对象。
$('.cool_cat_search')
.dropdown('get value');
在我从文档中复制 HTML 之前,我尝试在 select 标签上初始化一个下拉菜单,它产生的 HTML 与上面的略有不同。同样,它用作下拉菜单,但在检索远程内容时遇到类似问题。
var coolCatsField = '<div class="field">';
coolCatsField += '<label for="cool_cat_search">Find a cool cat:</label>';
coolCatsField += '<select id="cool_cat_search" class="ui fluid search selection dropdown" name="query"><option value="">Start typing to search or add</option></select>';
coolCatsField += '</div>';
我还尝试直接在 .search 上使用语义 UI 的 .api() 方法输入,它成功并自动替换了路由中的 {value} 并检索了服务器响应,但未能将这些结果附加到下拉列表中,即使我指定了 stateContext 属性:
$('.cool_cat_search .search')
.api({
action : 'find cool cats',
stateContext : '.cool_cat_search' // UI state will be applied to the dropdown element, defaults to triggering element.
});
因此,我无法自动替换路由 {value},也无法使用 urlData 属性 手动设置它。文档含糊不清,但它在那里有效,所以我想我做错了什么;非常感谢您抽出宝贵时间,很抱歉我无法提供 JSFiddle 来使用,但也许您会发现某个地方有错误。
我最近遇到了完全相同的问题,但由于时间有限没有时间提交错误报告。我设法在 jsfiddle 上复制了你的问题,我让它工作的唯一方法是在发送请求之前覆盖设置对象:
$('.ui.dropdown')
.dropdown({
apiSettings: {
action : 'find cool cats',
throttle: 500,
beforeSend: function(settings) {
settings.urlData = {
value: $('.ui.dropdown .search').val()
};
return settings;
}
}
});
关联的 GitHub issue 已关闭,显然我们找到了从未存在的问题的解决方案:'/search/coolcats?query={value}'
不起作用,因为值始终作为 [=12= 传递] 而不是 {value}
;改变它,它应该工作。
原始示例应如下所示:
//-------------------------------------------------------------------------
// Define API endpoints once globally.
//-------------------------------------------------------------------------
$.fn.api.settings.api = {
'find cool cats' : '/search/coolcats?query={query}'
};
这是我的 API 设置:
//-------------------------------------------------------------------------
// Define API endpoints once globally.
//-------------------------------------------------------------------------
$.fn.api.settings.api = {
'find cool cats' : '/search/coolcats?query={value}'
};
路由 returns 正确的 JSON 响应 as per the documentation:
// For example, "http://localhost:3000/search/coolcats?query=cool" returns this limited array of results:
{
"success": true,
"results": [
{
"name": "Cool Cat Cooper",
"value": "Cool Cat Cooper"
},
{
"name": "Cool Cat Charlie",
"value": "Cool Cat Charlie"
},
{
"name": "Cool Cat Mittens",
"value": "Cool Cat Mittens"
}
]
}
我在某个时候将此 HTML 附加到表单中(它与上面文档参考中的相同 "Favorite Animal" 代码):
var coolCatsField = '<div class="field">';
coolCatsField += '<label>Find a cool cat:</label>';
coolCatsField += '<div class="ui fluid search selection dropdown cool_cat_search">';
coolCatsField += '<input type="hidden">';
coolCatsField += '<i class="dropdown icon"></i>';
coolCatsField += '<input type="text" class="search" tabindex="0">';
coolCatsField += '<div class="default text">';
coolCatsField += 'Start typing to search or add';
coolCatsField += '</div>';
coolCatsField += '<div class="menu" tabindex="-1"></div>';
coolCatsField += '</div>';
coolCatsField += '</div>';
$('#someFormField') // Is a <div class="field">...</div> as well.
.after(coolCatsField);
并使用 API 设置初始化 .dropdown():
$('.cool_cat_search').dropdown({
apiSettings : {
action : 'find cool cats',
throttle : 500
}
});
语义 UI 应该 append route value automatically,但它显然不适用于下拉菜单,我得到一个错误:
API: Missing a required URL parameter: value /search/coolcats?query={value}
我试过的
添加一个urlData属性;结果它会将 {value} 替换为一个空字符串,因为 jQuery 的 .val() 即使里面有很多字符也无法捕捉到任何东西.search 输入(我确保它在每个字符后都连接到服务器)。不过,之后在控制台中触发 .val() 会返回我在字段中输入的任何内容。
$('.cool_cat_search')
.dropdown() // I think it should be initialized first for .val() to work.
.dropdown({
apiSettings : {
action : 'find cool cats',
throttle : 500,
urlData : {
value : $('.cool_cat_search .search').val()
}
}
});
当然,我也试过看看它是否总体上有效,并且它在所有前端的花里胡哨的地方都起到了应有的作用:
$('.cool_cat_search')
.dropdown({
apiSettings : {
action : 'find cool cats',
throttle : 500,
urlData : {
value : 'cool'
}
}
});
我还尝试使用语义 UI 的方法来获取值,而不是 jQuery 的 .val() 在 urlData 属性,运气不好。我根本不明白它是如何工作的,事实上,也许我应该在 .search 输入上初始化它,但无论哪种方式,它 returns 一个空字符串或一个对象。
$('.cool_cat_search')
.dropdown('get value');
在我从文档中复制 HTML 之前,我尝试在 select 标签上初始化一个下拉菜单,它产生的 HTML 与上面的略有不同。同样,它用作下拉菜单,但在检索远程内容时遇到类似问题。
var coolCatsField = '<div class="field">';
coolCatsField += '<label for="cool_cat_search">Find a cool cat:</label>';
coolCatsField += '<select id="cool_cat_search" class="ui fluid search selection dropdown" name="query"><option value="">Start typing to search or add</option></select>';
coolCatsField += '</div>';
我还尝试直接在 .search 上使用语义 UI 的 .api() 方法输入,它成功并自动替换了路由中的 {value} 并检索了服务器响应,但未能将这些结果附加到下拉列表中,即使我指定了 stateContext 属性:
$('.cool_cat_search .search')
.api({
action : 'find cool cats',
stateContext : '.cool_cat_search' // UI state will be applied to the dropdown element, defaults to triggering element.
});
因此,我无法自动替换路由 {value},也无法使用 urlData 属性 手动设置它。文档含糊不清,但它在那里有效,所以我想我做错了什么;非常感谢您抽出宝贵时间,很抱歉我无法提供 JSFiddle 来使用,但也许您会发现某个地方有错误。
我最近遇到了完全相同的问题,但由于时间有限没有时间提交错误报告。我设法在 jsfiddle 上复制了你的问题,我让它工作的唯一方法是在发送请求之前覆盖设置对象:
$('.ui.dropdown')
.dropdown({
apiSettings: {
action : 'find cool cats',
throttle: 500,
beforeSend: function(settings) {
settings.urlData = {
value: $('.ui.dropdown .search').val()
};
return settings;
}
}
});
关联的 GitHub issue 已关闭,显然我们找到了从未存在的问题的解决方案:'/search/coolcats?query={value}'
不起作用,因为值始终作为 [=12= 传递] 而不是 {value}
;改变它,它应该工作。
原始示例应如下所示:
//-------------------------------------------------------------------------
// Define API endpoints once globally.
//-------------------------------------------------------------------------
$.fn.api.settings.api = {
'find cool cats' : '/search/coolcats?query={query}'
};