禁用带有敲除绑定的select2下拉列表?

时间:2015-06-03 13:51:54

标签: javascript jquery asp.net-mvc razor knockout.js

我有一个MVC Razor项目,在我看来,我有一个Html.TextBoxFor data-bind="disable: setRoot"。 Select2 jquery插件使用此input。 我的问题是disable绑定无法正常工作。 这是我的代码:

<div class="control-label">Category</div>
                    <div class="input-group">
                        <div class="input-group-addon"><label><input data-bind="checked: setRoot" type="checkbox"> root</label>
                        </div>
                        @Html.TextBoxFor(m => m.Create.IdCategory, new { id = "QuickSearchMainCategory", data_bind = "disable: setRoot, value: model.Create.IdCategory", @class = "form-control" })
                    </div>

和我的js:

self.setRoot = ko.observable(true);

            self.beRoot = ko.computed(function() {
                if (self.setRoot() === true) {
                    self.model.IdCategory(self.model.IdRootCategory());

                } else {
                    self.model.IdCategory(null);
                }
            });

$("#QuickSearchMainCategory").select2({
                placeholder: "Category search",
                minimumInputLength: 3,
                width: 'resolve',
                ajax: {
                    url: urlQuickSearchCategory,
                    contentType: 'application/json',
                    dataType: 'json',
                    type: 'POST',
                    traditional: true,
                    quietMillis: 400,
                    data: function(term, page) {
                        var data = {
                            term: term
                        };
                        return data;
                    },
                    results: function(data, page) {
                        return { results: data };
                    }
                },
                dropdownCssClass: "bigdrop",
                formatResult: function(item) { return item.id + " - " + item.label; },
                formatSelection: function(item) { return item.id + " - " + item.label; },
                escapeMarkup: function(m) { return m; }
            });

如果我检查html,则禁用正在运行,但不是整个select2元素,而是仅使用id为QuickSearchMainCategory的输入。 我需要做什么?

1 个答案:

答案 0 :(得分:0)

Select2不能与'禁用'绑定一起使用,因为你必须明确地告诉select2使用它的内置函数来禁用它自己。

您必须使用此功能禁用/启用它:

$('#QuickSearchMainCategory').select2('disable');
$('#QuickSearchMainCategory').select2('enable');

您必须在ko viewmodel中执行此操作,因为仅设置禁用的HTML属性是不够的。