2015-01-09 75 views
0

我创建了一个js函数,用于切换对象(位于数组中)的属性的布尔值。总结我想要做的事情,我有2个列表。如果布尔属性为false,则另一个列表将显示一个项目(因此为切换功能)双击事件后敲除绑定

我的问题是当我将切换功能绑定到双击事件(触发器正确,通过调试器验证)我似乎无法得到绑定正确(或可能是其另一个问题完全)如果我手动将切换功能与硬编码的“Id”值(确定数组中的哪一项待绑定)绑定能够正常工作,并且该项目出现在第二个列表中。

var TestNWJS = TestNWJS || {}; 

TestNWJS.QualificationList = (function() { 

    //private functions 
    function CreateQualificationModel(allCredentialsList) { 
     TetsNWJS.QualificationList.ViewModel = {}; 
     TestNWJS.QualificationList.ViewModel.AllCredentials = ko.observableArray(allCredentialsList); 

    } 
    function toggleselected(allCredentialsList, id) { 

     var credential = ko.utils.arrayFirst(allCredentialsList, function (credential) { 
      var stringToInt = parseInt(id); 
      return credential.Id === stringToInt; 
     }); 

     if (credential.Selected == false) { 
      credential.Selected = true; 
     } 
     else { 
      credential.Selected = false; 
     } 

     return credential; 
    } 

    //public function 
    return { 
     Init: function (allCredentialsList) { 

      CreateQualificationModel(allCredentialsList); 
      toggleselected(allCredentialsList, 51); // THIS IS THE HARDCODED TEST, IT WORKS 


      //THIS IS WHAT I WANT TO WORK CORRECTLY: 
      $("#allCredentials").live('dblclick', function (e) { 
       toggleselected(allCredentialsList, this.value); 
      }); 

      ko.applyBindings(TetsNWJS.QualificationList.ViewModel); 


     } 
    } 

})(); 
+0

你可以把这个在小提琴明白了什么是不工作?你也试图从视图模型中添加它,但我会建议创建一个快速自定义绑定处理程序来执行此操作。你还使用哪个版本的jQuery? – 2015-01-09 19:38:11

回答

0

只是为了测试这一点,我做了一个小提琴以下 -

http://jsfiddle.net/pwkad/uend52s5/

$("#container").on('dblclick', function (e) { 
    console.log('double clicked it'); 
}); 

通过现场切换到它的最新版本的jQuery

0

如何为我工作你在测试你的代码吗?看看你发布的代码,看起来像Selected property的值正在以正确的方式改变。但是,这不是可观察的,所以你没有在屏幕上反映出结果。

尝试创建每个凭证类,以及观察到的 '选择' 属性:

function Credential(id, selected) 
{ 
    this.id = id; 
    this.selected = ko.observable(selected); 
} 

TestNWJS.QualificationList.ViewModel.AllCredentials = ko.observableArray(allCredentialsList.map(function(item){ return new Credential(item.id, item.selected);})); 

更新

这是一个用一个简单的例子codepen。有一个包含对象列表的视图模型,每个对象都有一个可观察的属性。这里是过滤仅所选项目第二计算性能:

http://codepen.io/adilsonjr/pen/yygxbg

+0

这将在我的viewmodel内? – John 2015-01-09 20:03:37

+0

是的。它应该在你的视图模型中。 – 2015-01-11 00:49:35