【问题标题】:Semantic UI dropdown selection content from API来自 API 的语义 UI 下拉选择内容
【发布时间】:2015-10-25 15:32:51
【问题描述】:

我正在使用 Semantic UI 2.0 并尝试使用从其 API 返回的数据在我的下拉列表中构建选项。

对于下拉列表本身,我使用的代码与 Semantic UI 文档中显示的 this 代码几乎相同:

<div class="ui search selection dropdown select-city">
  <input type="hidden" name="city">
  <i class="dropdown icon"></i>
  <div class="default text">Select City</div>
</div>

我有一个返回 json 格式城市的服务,然后 Semantic UI 在控制台中显示所有 261 个城市的结果都成功:

"Using specified url"   ["/cities/"]    1648
"Querying URL"  ["/cities/"]    0
"Sending request"   [undefined, "get"]  0
"Successful API Response"   [Object { success=true, results=[261]}]

/cities 端点返回一个 json,格式如下:

{"success":true,"results":[{"description":"Opole","data-value":1},{"description":"Wrocław","data-value":2},{"description":"Warszawa","data-value":3},{"description":"Budapest","data-value":4},{"description":"Köln","data-value":5}, ...]}

Semantic UI 好像没有直接理解 json 的格式。

我尝试了许多格式的 json 属性,甚至尝试对 html 进行一些更改。例如,尝试在 select 底部添加一个空的&lt;div class="menu"&gt;,希望 Semantic UI 将其填充,例如:

<div class="ui search selection dropdown select-city">
  <input type="hidden" name="city">
  <i class="dropdown icon"></i>
  <div class="default text">Select City</div>
  <div class="menu"></div>
</div>

我正在尝试将属性的格式与example 中的格式相匹配,例如,使用“data-value”属性。

但它也不起作用,我在源代码中看到了 Semantic UI checks for that,所以它没有任何区别。最后,我的问题仍然存在,下拉选择中没有插入任何项目。

【问题讨论】:

  • 您究竟是如何获取这些数据的?能发下相关代码吗?
  • 抱歉,我如何获取这些数据的响应时间过长。以前我在语义 ui 中使用默认的 .api 函数。由于它不起作用,现在我正在使用ajax调用并自己填写菜单,而不是使用semantic-ui api的自动过程。我将尝试重做我之前使用的代码并更新问题。

标签: javascript html json drop-down-menu semantic-ui


【解决方案1】:

如果您不发布您正在使用的代码,我会在这里采取一些措施,但dropdown 希望数据结果键入为{ name: "Item 1", value: "value1" },如relevant part of the documentation 中所述。

如果您有不同的字段名称,那么您可以在设置中提供 fields 结构来覆盖这些:

$('.ui.dropdown').dropdown({
    fields: { name: "description", value: "data-value" },
    apiSettings: {
        mockResponse: {
            success: true,
            results: [
                {"description":"Opole","data-value":1},
                {"description":"Wrocław","data-value":2},
                {"description":"Warszawa","data-value":3},
                {"description":"Budapest","data-value":4},
                {"description":"Köln","data-value":5}
            ]
        }
    }
});

所需的最低 HTML 为:

<div class="ui search selection dropdown">
    <div class="text">Search</div>
</div>

或:

<div class="ui search selection dropdown">
    <input class="search"></input>
</div>

空的&lt;div class="menu"&gt;&lt;/div&gt; 会自动插入,但&lt;input class="search"&gt;&lt;/input&gt; 是必需的,并且只有在您已有&lt;div class="text"&gt;&lt;/div&gt; 元素时才会自动插入。

但请注意,在我认为下拉行为有问题的情况下,在您开始在搜索字段中输入内容之前,它不会加载数据,因此只需单击下拉图标即可不够。

【讨论】:

  • 太棒了!这就是这里的问题。设置“字段”哈希就可以了。谢谢。
  • 这个答案的一个问题是下拉菜单停止搜索,例如:jsfiddle.net/nLghbfs8 通过开始输入“K”确实过滤了“Koln”。不知道为什么。
  • @Eduardo 使用 API 接口时,它希望 API 查询对其进行过滤。您可以查看使用mockResponseAsync 并在设置对象中找到query 以进行测试,否则您需要您的服务器过滤查询词。
  • 啊,好的,我明白了。感谢您的澄清。我将相应地更新我的服务器端代码,以便它可以按预期工作。非常感谢!
  • 大家好,我在这里遇到同样的问题,搜索不再起作用了...@Parakleta:我必须将服务器设置为过滤查询词是什么意思?提前致谢。
猜你喜欢
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多