javascript - 如何在选择中使用模板?

标签 javascript jquery html css knockout.js

我可以通过这样做在 Knockout.js 中创建一个伪选择列表:

<div style="width:325px;height:500px;overflow:auto;" data-bind="template: { name: 'group-tmpl', foreach: explorer().categoryData }"></div>

但是您无法像使用 <select> 那样获得样式和选定值.

我尝试这样做,但出现错误,提示您不能在此数据绑定(bind)中使用模板。

<select data-bind="options: explorer().categories, value: explorer().selectedCategory, optionsText:'name', template: 'group-tmpl'" size="15" />          

我还尝试在 <option> 中指定一个模板,但没有正确呈现(只看到 [object Object] 的列表)。

我想要的其中一件事是 <option> 中的图像.所以我想我可以尝试使用 css 并在加载后使用 jQuery 设置 attr,但这种做法违背了使用 Knockout 的目的。

我希望我错过了一些明显和/或容易的事情。

最佳答案

正如评论者所指出的,一般来说,optionselect 中不能有太多花哨的东西。您需要使用类似 Select2 的库, Chosen , 或 Selectize ,通常由普通的 select 支持。

不过,要回答您的具体问题,如果您想在选择中使用模板化的 foreach,您完全可以这样做:

ko.applyBindings({
  items: [
    { txt: "option A" },
    { txt: "option B" },
    { txt: "option C" }
  ]
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script type="text/html" id="itemTmpl">
<option>~~~<!-- ko text: txt --><!-- /ko -->~~~</option>
</script>
<select data-bind="template: { name: 'itemTmpl', foreach: items }"></select>

同样,您不能在 script 模板中任何花哨的事情,因为您不能在 select 中做任何花哨的事情首先。但它可以在选择上使用模板 + foreach。这很有用的一个典型用例是当您需要(自定义)optgroup 时。另一个用途可能是您希望在 option 上包含特殊属性(也许是 aria- 属性?)。

关于javascript - 如何在选择中使用模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33506352/

相关文章:

javascript - 使用 YUI 将 tr 附加到 tbody

javascript - 世界银行 JSONP 解析

javascript - 如果用户使用移动设备,则禁用 download_manager

javascript - 检测 Html 元素是否与另一个 Html 元素重叠

javascript - 按数字键提交表格

javascript - 为动态生成的 div 设置不同的颜色

带有数组的 Javascript/jQuery 动画

javascript - 如何在javascript中检查日期是在本周还是当月还是下个月?

jQuery - 实时更新长度,而不是仅在页面加载时更新

使用 SASS 进行 HTML 表单验证?