Bootstrap 多选不适用于敲除绑定
Bootstrap multiselect not working with knockout binding
我正在使用 this plugin for implementing a multi-select dropdown with checkboxes using KnockoutJs in an ASP.NET MVC web application. I have followed the code in this jsfiddle,但是下拉菜单不起作用,而 fiddle 可以正常工作。
HTML代码:
<select id="status-select" multiple="multiple" class="form-control"
data-bind="options: $root.statuses, selectedOptions: $root.selectedStatuses, multiselect: { includeSelectAllOption: true }">
</select>
...
...
@section require {
require(['app/viewModel']);
}
<script type="text/javascript">
$(document).ready(function () {
$("#status-select").multiselect();
});
</script>
viewModel.ts:
export class ViewModel {
statusOptions = [
"One",
"Two",
"Three"
];
statuses = ko.observableArray(this.statusOptions);
selectedStatuses = ko.observableArray([]);
}
ko.applyBindings(new ViewModel());
以下是我在项目中包含脚本的顺序:
<script src="~/Scripts/jquery-2.2.0.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" />
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<link href="~/css/bootstrap-multiselect.css" rel="stylesheet" />
<script src="~/Scripts/bootstrap-multiselect.js"></script>
以下是我得到的输出:
请注意,select
标签内的选项已正确绑定,但由于 ul
标签为空,因此下拉列表中未显示任何内容。我在这里做错了什么?
那是因为您使用的是 Bootstrap 4,而 bootstrap-multiselect 官方只适用于 Bootstrap 3。
也就是说,Github 上有一个名为 Bootstrap 4 compatibility which requests an official support for Bootstrap 4, and a user named @adeeb1 suggests its own implementation, which works - see it live here 的未解决问题。
几点注意事项:
- Bootstrap 4 的非官方支持并不完美,但是:在我的演示中,您可以看到 "Select all" 复选框未与其他复选框对齐。
- 我的演示使用
bootstrap.bundle.min.js
,(注意使用bundle
),其中包括popper.js
。您的代码段不使用 bundle
版本,因此要么更改它,要么包括 popper.js
. 的独立版本
- 您的
statusOptions
属性 不是 observableArray
,因此不会使用双向绑定。我在演示中更改了它。
- 无需使用
$("#status-select").multiselect()
,knockout 帮你搞定
我正在使用 this plugin for implementing a multi-select dropdown with checkboxes using KnockoutJs in an ASP.NET MVC web application. I have followed the code in this jsfiddle,但是下拉菜单不起作用,而 fiddle 可以正常工作。
HTML代码:
<select id="status-select" multiple="multiple" class="form-control"
data-bind="options: $root.statuses, selectedOptions: $root.selectedStatuses, multiselect: { includeSelectAllOption: true }">
</select>
...
...
@section require {
require(['app/viewModel']);
}
<script type="text/javascript">
$(document).ready(function () {
$("#status-select").multiselect();
});
</script>
viewModel.ts:
export class ViewModel {
statusOptions = [
"One",
"Two",
"Three"
];
statuses = ko.observableArray(this.statusOptions);
selectedStatuses = ko.observableArray([]);
}
ko.applyBindings(new ViewModel());
以下是我在项目中包含脚本的顺序:
<script src="~/Scripts/jquery-2.2.0.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" />
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<link href="~/css/bootstrap-multiselect.css" rel="stylesheet" />
<script src="~/Scripts/bootstrap-multiselect.js"></script>
以下是我得到的输出:
请注意,select
标签内的选项已正确绑定,但由于 ul
标签为空,因此下拉列表中未显示任何内容。我在这里做错了什么?
那是因为您使用的是 Bootstrap 4,而 bootstrap-multiselect 官方只适用于 Bootstrap 3。
也就是说,Github 上有一个名为 Bootstrap 4 compatibility which requests an official support for Bootstrap 4, and a user named @adeeb1 suggests its own implementation, which works - see it live here 的未解决问题。
几点注意事项:
- Bootstrap 4 的非官方支持并不完美,但是:在我的演示中,您可以看到 "Select all" 复选框未与其他复选框对齐。
- 我的演示使用
bootstrap.bundle.min.js
,(注意使用bundle
),其中包括popper.js
。您的代码段不使用bundle
版本,因此要么更改它,要么包括popper.js
. 的独立版本
- 您的
statusOptions
属性 不是observableArray
,因此不会使用双向绑定。我在演示中更改了它。 - 无需使用
$("#status-select").multiselect()
,knockout 帮你搞定