2014-01-27 2 views
2

방금 ​​Knockout.js를 배우기 시작했고 해결해야 할 몇 가지 문제가 생겼습니다.knockout.js에 대한 터치 이벤트 바인딩

기본적으로 내 녹아웃 생성 목록에 내 touchend 이벤트를 추가하고 싶습니다.

HTML :

<ul data-bind="foreach: names"> 
    <li data-bind="text: $data"></li> 
</ul> 

JS : 순간 나는이 같은 일을 해요

var names = ['Tom','Jennifer','Jack','Poul']; 

ko.observableArray(names); 

ko.applyBindings(names); 


$('li').on('touchend, function(){ 
... do something 
}); 

을하지만이 그것을 할 수있는 적절한 방법이 아닌 것 같은데요? 녹아웃으로 나의 'touchend'를 '데이터 바인딩'하는 방법 (그걸 할 수있는 방법이라면)? 사전 :

+0

http://stackoverflow.com/questions/10446873/swipe-action-binding-in-knockoutjs – amin

답변

7

에서

덕분에 당신은 바인딩 knockoutjs 이벤트를 사용할 수 있습니다 : 당신은 꽤 괜찮 중 하나 보이지 않는 바인딩의 ViewModel

<li data-bind="text: $data, event: { touchend: $parent.touchEndHandler }"></li> 

http://knockoutjs.com/documentation/event-binding.html

는, 대신에이 시도 :

function NamesViewModel() { 
    var self = this; 
    self.names = ko.observableArray(['Tom','Jennifer','Jack','Poul']); 
    self.touchEndHandler = function(data, event) { 
     var element = $(event.target); 
     alert("TouchEnd Triggered"); 
     // can access self here which is the viewmodel 
    }; 
} 

var viewModel = new NamesViewModel(); 
ko.applyBindings(viewModel); 

예 - http://jsfiddle.net/infernalbadger/pjG8r/

+0

보기에 'li'가 표시되기 때문에 아마'event : {touchend : $ parent.touchEndHandler}'라고 쓰고 싶었을 것입니다. 'data-bind = "foreach : names"'... 내부에있을 것입니다 ... – nemesv

+0

@nemesv 감사합니다. 그냥 그 사실을 알았고 편집자가 귀하의 코멘트가 들어 왔을 때 편집하고있었습니다 : D –

+0

답장을 보내 주셔서 감사합니다. 'touchEndHandler'메소드에 'this'(터치 된 요소)를 어떻게 전달하겠습니까? –