2013-06-12 129 views
2

http://jsfiddle.net/scottbeeson/SRUKN/16/为什么我不能删除绑定后添加的observables?

点击左侧列表中的项目将它们添加到右侧列表中。点击右侧列表中的项目应删除它们。它删除已经存在的第一个,但不会删除添加的项目。我是否需要重新应用绑定或其他?

ko.applyBindings(viewModel); 

$('.result').on('click',function() { 
    var item = ko.dataFor(this); 
    viewModel.visibleItem.push(item); 
}); 

$('.visibleItem').on('click',function() { 
    var item = ko.dataFor(this); 
    viewModel.visibleItem.remove(item); 
}); 

回答

3

您的点击处理程序只附加到已经在DOM中的元素。

$(document).on('click', '.visibleItem', function() { 
    var item = ko.dataFor(this); 
    console.log(item) 
    viewModel.visibleItem.remove(item); 
}); 

:如果你想使你需要连接在一个highler水平,这是已经在DOM和不改变(例如document或你的情况.top)处理程序的动态添加元素工作演示JSFiddle.

但Kncokout的办法是让淘汰赛处理您的活动:

所以加处理程序在你的视图模型:

viewModel.removeVisible = function(item) { 
    viewModel.visibleItem.remove(item); 
} 

而且在你看来其绑定:

<div class="visibleItem" data-bind="click: $parent.removeVisible"> 
</div> 

演示JSFiddle.

+0

是的,但我做了一些研究,它看起来像有优势,使用不显眼的事件处理(jQuery的)的http:// knockoutjs .com/documentation/unobtrusive-event-handling.html 但您的第一个解决方案完美地工作。谢谢! –

+0

@ScottBeeson,nemesv的第一个答案是不显眼的,以及委托;两全其美。如果它解决了你的问题,不要忘了标记他的答案为可接受的。 –

+0

是的,这就是为什么我说我会这么做......还有,等待计时器,我可以接受:\ –

相关问题