【发布时间】:2016-06-28 05:28:15
【问题描述】:
我在 Durandal 项目中工作,这意味着我使用 knockout 库。另外,我使用了 jQuery 选择的插件。
最近,我将淘汰赛从 2.0 版升级到 3.4.0 版。作为副作用,选择的插件有缺陷。它有一个错误:第一个选择始终是列表中的第一项,无论 ko 可观察对象绑定的实际值如何。
这是一个再现:
ko.bindingHandlers.chosen = {
init: function (element) {
ko.bindingHandlers.options.init(element);
$(element).chosen({ disable_search_threshold: 10 });
},
update: function (element, valueAccessor, allBindings) {
ko.bindingHandlers.options.update(element, valueAccessor, allBindings);
$(element).trigger('chosen:updated');
}
};
ko.applyBindings({
getItemAvailableAccessTypes: function(data) {
return [
{codeForChosen: "Open", AccessTypeName: "Open access"},
{codeForChosen: "Restricted", AccessTypeName: "No access"}
];
},
child: {
AccessType: ko.observable("Restricted")
}
});
.chosen-container { width: 100% !important; }
pre { background: white; padding: 10px; color: #333; font: 11px consolas; border: 1px solid #ddd; }
<link href="https://cdnjs.cloudflare.com/ajax/libs/chosen/1.5.1/chosen.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/chosen/1.5.1/chosen.jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-debug.js"></script>
<div data-bind="with: child">
<select data-bind="chosen: $parent.getItemAvailableAccessTypes($data), value: $data.AccessType, optionsText: 'AccessTypeName', optionsValue: 'codeForChosen'"></select>
</div>
<hr>Debug info: <pre data-bind="text: ko.toJSON($root, null, 2)"></pre>
【问题讨论】:
-
我想我可以reproduce the issue。 (PS。如果您在问题中添加这样的repro,它会有所帮助,让其他人更容易回答。)
-
投票,-感谢您附加的 jsFiddle,我在问题预兆处添加了对此的引用。
-
随意内联代码,甚至可以作为堆栈片段(编辑器工具栏项之一)。然后,如果 jsfiddle 链接失效,这个问题对未来的访问者仍然有用。
-
我不知道该怎么做。你能编辑我的问题吗?谢谢。
-
如果你现在点击“编辑”,或者查看问题历史记录,你可以看到我是如何在 repro 中编辑的。
标签: knockout.js jquery-plugins jquery-chosen