【发布时间】:2019-03-27 14:06:37
【问题描述】:
所以这是在库之上堆积库,但我不确定还能做什么。
我们的应用程序有许多下拉元素,它们都是Bootstrap Select 对象。这些将 select 中的标准选项标签集替换为一系列复杂的其他元素,使您可以更好地控制子元素的样式并使它们可搜索。
这些对象中的大多数作为可重用组件存在,具有 HTML 视图和 Typescript ViewModel,与 Knockout 绑定在一起。
其中许多菜单在文本旁边都有图标。这由 optionsAfterRender 处理。这是一个例子。
查看:
<select
data-bind="options: items,
value: selectedValue,
optionsText: 'value',
optionsValue: 'id',
selectPicker: {},
optionsAfterRender: applyOptionAttributes">
</select>
视图模型:
export default class SelectComponent {
selectedValue: KnockoutObservable<string>;
items: KnockoutObservableArray<SelectOption>
constructor(koObservable: KnockoutObservable<string>) {
// items fetched and bound
}
applyOptionAttributes(option: Node, item: SelectOption): void {
ko.applyBindingsToNode(option, { attr: { "data-content": `<img src="${item.iconurl}" />`, title: item.value } }, item);
}
}
interface SelectOption {
value: string;
id: string
iconurl: string;
}
这很好。但是,由于 Bootstrap Select 对其中的项目进行样式设置的方式,该图标不会应用于当前选定的项目 - 它仅在用户单击菜单并弹出时显示。
现在,当然,我们也需要在当前选定的项目中显示图标。但我不知道如何让该元素绑定到它。由于 view-viewmodel 模式,我无法直接获取它。它似乎不在 optionsAfterRender 传递的节点中。
我怎样才能掌握它的样式?
编辑:很确定这是引导选择中的错误。提出了一个问题
https://github.com/snapappointments/bootstrap-select/issues/2129
【问题讨论】:
-
在被点击之前,其他 Bootstrap 样式是否应用于选择?听起来
selectPicker()在渲染之后被初始化并且缺少 css 绘制可能存在问题。 -
@Levidps 感谢您的关注。选择标签本身有一些类,由于简洁,我没有使用,但没有动态
-
我的想法更多的是
selectPicker替换了一些 HTML 结构,因此初始类很好 b/c 它们存在并且 html 在初始绘制时存在。我会很好奇,因为 HTML 结构是在渲染后添加的,它在最初的 CSS 绘制中丢失了。前任。 ` DOM > CSS > selectPicker > new HTML elements` 现在在用户点击选择之前不会出现新的 CSS 绘制。 -
@Levidps 嗯。我认为这是引导选择中的错误。已对项目提出问题github.com/snapappointments/bootstrap-select/issues/2129
标签: javascript css knockout.js bootstrap-4 bootstrap-select