让dropdownchecklist与knockoutJS合作

时间:2012-07-02 04:19:56

标签: javascript jquery knockout.js

我正在尝试让dropdownchecklist jquery插件与ko一起使用。我已经连接了自定义绑定处理程序,但下拉列表不会填充选项。请检查我的小提琴:http://jsfiddle.net/amitava82/wMH8J/11/

感谢您的帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

这是因为您在绑定KnockoutJS之前创建了下拉列表。这个下拉列表是如何工作的?它会创建额外的 divs spans ,它们会复制选择的内容并创建漂亮的列表。应用该绑定后,他们会修改select(正如他们所做的那样),但下拉不会更新,因为这个库是静态的,即它复制了 select 仅在致电时。

我已更新您的jsFiddle,因此您可以看到临时修复。我的意思是它现在有效,绑定在之前应用创建下拉列表。唯一的问题是,更改options中的viewModel字段不会影响下拉列表。您可能需要做的是使用subscribe method。您必须监视options字段的更改,如果它们发生,您必须重新创建下拉列表。这至少是一种简单的方法。

答案 1 :(得分:0)

@freakish answer适用于大多数静态内容,但对于任何动态使用模板,例如ifforeach绑定,或者您需要支持基础数据更新,例如更多复选框选项“突然“变得可用,它将无法工作。

a really simple $.button binding apply的一个示例,可用于包装更简单的jQuery调用。向controls添加更多成员以使其在绑定中可用是一件简单的事情。

jQuery Dropdown Check List的情况有点棘手,因为你显然想要使用内置的options处理程序,但是你需要在$.dropdownchecklist处理程序之后运行options已经运行,因为它创建了jQuery所依赖的DOM元素。 By wrapping the built in options handler,我们总是在正确的背景下被召唤。

根据我的使用经验(我们的项目使用大约10-15个自定义绑定),你平均大约10-20行实际的JS。如果你开始膨胀到+100行,我发现重构并重新思考是个好主意。我希望这有助于一些:-)我已经在一个主要的UI实施项目中使用Knockout几个月了,我真的学到了很多东西,我对这些东西感到惊讶。