2011-10-14 171 views
14

我有一系列复选框,我想收集选定的复选框。该复选框是div的和被点击div时复选框应该得到遏制,以及:当使用Jquery更改值时,KnockoutJS属性不会更新

var oCheckBox = $($(this).find('.chkSocialMediaItem').get(0)); 
oCheckBox.attr('checked', !$(oCheckBox).attr('checked')); 

这工作得很好,但KnockoutJS不拿起变化等所选择的不更新我的柜台项目。

我读了你需要触发改变事件的地方。但是,当我听取复选框上的更改事件时,它确实会被触发。

任何帮助,将不胜感激, 谢谢!

更新:

我已经找到了 '基因敲除' 的解决方案。 在我的div我做了一个数据绑定关“点击”,并在该函数改变选中的值:

<script type="text/html" id="Template"> 
    <div class="item" data-bind="click: DivClicked"> 
     <input type="checkbox" data-bind="checked: IsASelectedItem" class="chkSocialMediaItem"/> 
    </div> 
</script> 


function SocialMediaSearchItem() {   
      this.IsASelectedItem = ko.observable(); 
      this.DivClicked = function() { 
       this.IsASelectedItem(!this.IsASelectedItem()); 
      }; 
} 

这是唯一的解决办法?我真的很想看到一个Jquery解决方案。

回答

11

checked绑定仅侦听click事件。手动触发点击事件最终会根据设置实际选中值的时间使框不同步。

设置该值的首选方法是更新您的视图模型值,就像您在上面的第二个示例中所做的那样。

但是,如果您使用的是1.3beta,则可以通过使用ko.dataFor API将元素与其相应的数据连接起来。它看起来是这样的:

var oCheckBox = $('.chkSocialMediaItem'), 
     data = ko.dataFor(oCheckBox[0]); 
     data.selectedItem(!data.selectedItem()); 
+0

感谢您的快速响应!我会检查测试星期一,当我回来@工作:) –

+0

哦,这是方便的,任何想法如何找出什么'属性'一个控件必须以及viewModel? –

+0

目前没有办法做到这一点,除了可能自己解析'data-bind'属性,然后使用属性名称和数据('data ['somePropertyName']') –

12

我碰到了同样的问题......虽然我没有发现,我从一个张贴@RP尼迈耶工作不同的解决方案,所以我想我会张贴。

淘汰赛版本:1.2.1 - (敲除1.2.1.js)

要取消通过敲除结合的复选框我用下面

$('YourCheckBoxHere').removeAttr('checked'); 
$('YourCheckBoxHere').triggerHandler('click'); 

检查通过敲除结合的复选框我曾经就这个问题下面

$('YourCheckBoxHere').attr('checked', 'true'); 
$('YourCheckBoxHere').triggerHandler('click'); 

希望,如果其他的解决方案没有工作,这也许会=)...浪费了3个小时左右。

相关问题