0

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

感谢你的帮助。谢谢!

4

2 回答 2

0

这是因为您在绑定 KnockoutJS之前创建了下拉列表。这个下拉菜单是如何工作的?它创建了额外的divspan,它们复制了select的内容并创建了漂亮的列表。之后应用绑定并修改选择(应该如此),但下拉列表没有更新,因为这个库是静态的,即它仅在调用时复制选择的内容。

我已经更新了你的jsFiddle,所以你可以看到临时修复。我的意思是它现在可以工作了,绑定是创建下拉列表之前应用的。唯一的问题是更改options字段viewModel不会影响下拉菜单。您可能需要做的是使用subscribe 方法。您必须监控options字段的更改,如果发生更改,您必须重新创建下拉菜单。至少这是一个简单的方法。

于 2012-07-02T08:07:32.303 回答
0

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

一个非常简单的$.button绑定 示例,apply可用于包装更简单的 jQuery 调用。controls添加更多成员以使它们在绑定中可用是一件简单的事情。

然而,jQuery Dropdown Check List 的情况有点棘手,因为您显然想使用内置的options处理程序,但您需要在处理程序运行$.dropdownchecklistoptions运行,因为它创建了 jQuery 所依赖的 DOM 元素。通过包装内置的options处理程序,我们总是在正确的上下文中被调用。

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

于 2012-07-03T18:29:15.973 回答