jQuery事件没有绑定到knockout条件元素

时间:2014-03-09 14:26:45

标签: javascript jquery knockout.js

我有一个简单的loggedIn属性作为ko绑定作为布尔值,因此当一个人登录时(一个具有异步xhr的检查以确认服务器端)的一个元素应显示标题:

<!-- ko if: loggedIn -->
<div class="loggedin">
  <a class="logout">Log Out</a>
</div>
<!-- /ko -->

<!-- ko ifnot: loggedIn -->
<div class="loggedout">
  <a class="login">Log In</a>
  <a class="signup">Signup</a>
</div>
<!-- /ko -->

上述内容适用于展示/隐藏视角,即如果loggedIntrue,则会显示Log Out链接。

我遇到的问题是将jQuery绑定到元素,即使使用.on

$('.loggedin').on('click', '.logout', function () {
   // Never fires...
});

如果我刷新页面会有效,但任何动态更改都会让我无法绑定到点击(或任何其他)事件。

更新:我已创建a fiddle以显示问题

2 个答案:

答案 0 :(得分:1)

这样做的一个好方法是在vm中使用一个函数来完成工作,而不是依赖于jquery事件。然后将click事件绑定到您的函数。

<div class="loggedout" data-bind="click: someVMFunction">
<a class="login">Log In</a>
<a class="signup">Signup</a>
</div>

答案 1 :(得分:0)

我找到的解决方案是使用ko的{​​{1}}:

visible

这似乎完美无缺,允许jQuery无限制地绑定元素。