2012-06-20 5 views
0

내 바인딩 목적에 노크를 사용하고 있으며 공유 모듈에서 작업 중입니다. 기본적으로 링크가 몇 개 있으며 기본적으로 서로 다른 값으로 동일한 함수를 호출합니다. 예를 들어 Facebook을 클릭 한 다음 값이 "Facebook"인 모든 서비스와 Twitter를 클릭 할 때 "Twitter"값을 사용하여 함수를 호출합니다. 하지만 기본적으로 같은 기능을 호출합니다. 이제 내가 할 수있는 것은 data-bind = "click : Share"와 같은 것이므로 HTMl에서 매개 변수를 지정하는 방법이 없다. 여기에서는 매개 변수를 지정할 수 없다는 것을 알 수 있습니다.이벤트에 ko.observable에 쓰는 방법은 무엇입니까?

이제 js 파일에서이 함수가 인수로 취할 ko.observable을 만들 수 있습니다. 그러나 다른 링크를 클릭 할 때 html click 이벤트에서 관찰 가능 항목을 쓰는 방법이 필요합니다. 그것을하는 방법에 어떤 아이디어?

+0

이 이해하기 매우 어렵습니다. 내 대답에 귀하의 질문이 포함되어 있지 않다면 질문을 명확하게 편집하십시오 (또는 코드를 추가하십시오). – Tyrsius

답변

1

녹아웃은 현재 컨텍스트를 데이터 바인딩에 사용 된 모든 함수에 전달합니다. 즉, click: share으로 전화하면 사용자가 속한 서비스를 전달하게됩니다. Here is a fiddle demonstrating this,하지만 꽤 기본적인 이후로 여기에 코드를 넣을 것입니다.

더 복잡한 바인딩의 경우 개체에 name 속성이 있으며 $data 대신 사용할 수 있으며 share() 함수에서 사용할 수 있습니다.

HTML :

<ul data-bind="foreach: services"> 
    <li data-bind="text: $data, click: $parent.share" /> 
</ul>​ 

자바 스크립트 :

data = [ 
"Facebook", 
"Twitter", 
"Flickr", 
"SomeOtherWeb2.0 Service" 
]; 

var ViewModel = function(data) { 
    this.services = ko.observableArray(data); 
    this.share = function(service){ 
     alert("You Clicked on: " + service); 
    }; 

}; 

ko.applyBindings(new ViewModel(data));​ 
+0

나는 정확하게 당신의 요점을 보았다. 따라서 기본적으로 모든 링크에 컨텍스트를 제공해야하며 예제 데이터 []가 해당 컨텍스트가됩니다. 그래서 내 솔루션 데이터 배열을 사용하여 거짓말 같아요. 나는 모든 다른 링크를 사용하고 있으며 서로간에 관계가 없지만 템플릿을 사용하여 템플릿을 생성하고 동일한 소스의 모든 것을 확인하고 관련시킬 수 있는지 확인해야합니다. 감사. – TeaLeave

+1

@Californicated, 데이터 배열은 앱의 데이터 소스 대신 사용되는 예제입니다. 그리고'click' 컨텍스트에서 배열의 항목은 전체'data' 배열이 아니라 컨텍스트입니다. 링크를 연결하지 않고도이 기능을 수행 할 수있는 방법이 있지만 멀리 떨어져있을 것입니다. 넉 아웃 (knockout)은 MVVM 패턴으로 당신을 유지하려고 시도하고 그것을 사용하면 인생을 더 쉽게 만들어 줄 것입니다. – Tyrsius

관련 문제