2012-10-24 3 views
1

jquery UI에 knockout.js 사용자 정의 바인딩을 사용하고 있습니다. 난 내가 allBindingsAccessor을 통해 바인딩 정의에 현재의 모델 객체의 currentSelectedTab 속성을 설정하려고 여기사용자 정의 바인딩 녹아웃에서 모델 속성에 액세스하는 방법

http://jsbin.com/ikidiw/7/edit

예를 들어 바이올린을 만들 수 있습니다. 하지만 모델 obejct에 currentSelectedTab 함수가 없다는 오류가 발생합니다. 뭐가 문제 야 ?

+0

전체 솔루션을 제공 할 시간이 없지만 allBindingsAccessor()는 현재 바인딩 컨텍스트의 모든 바인딩을 반환합니다. 그 중 하나는 "탭"입니다. 따라서 구문은 var tab = allBindingsAccessor(). tab -이 탭에서 tab.selected에 액세스 할 수 있습니다. –

+0

답변 중 하나를 선택하여 올바른 답을 선택하십시오. 원하지 않는 것이 있다면 그 이유를 말해주십시오. – inancsevinc

답변

4

http://knockoutjs.com/documentation/custom-bindings.html에 따라 초기화 기능의 특성이 같다 :

init: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) 

여기서 뷰 모델은 ko.applyBindings 전달 된 모델 오브젝트이다. 그래서 init 함수의 매개 변수에 allBindingsAccessor 후 그 뷰 모델 매개 변수를 추가 한 후, 다음과 같은 방법으로 코드를 변경할 수 있습니다 대신

allBindingsAccessor().currentSelectedTab(ui.index); 

을 원하는 경우

viewModel.currentSelectedTab(ui.index); 
2

을 쓸 수 있습니다 현재 모델에 액세스하려면 현재 뷰 모델 객체 (see the documentation)가 될 네 번째 인수로 초기화 함수를 확장해야합니다.

여기에 0
init: function (element, valueAccessor, allBindingsAccessor, viewModel) { 
     var options = ko.utils.unwrapObservable(valueAccessor() || {}); 

     options.select = function (event, ui) { 
      viewModel.currentSelectedTab(ui.index); 

     };   
     $(element).tabs(options);    
    } 

당신이 그것을 밖으로 시도 할 수 있습니다 : http://jsbin.com/uwajus/1/edit

1

을 나는 문제는 당신이 뷰 모델 이름 대신 바인딩 접근 포인터 값에 액세스하려고하는 것 같다 생각합니다.

당신은 그것을 시도 할 수 있습니다 :

<div id="ccftabs" class="uitab" data-bind="tab : { selected : currentSelectedTab }"> 

그리고 thne 자바 스크립트

var options = ko.utils.unwrapObservable(valueAccessor() || {}); 
    options.select = function (event, ui) { 
    options.selected(ui.index);  
    }; 

    $(element).tabs(options); 

에서
HTML 나는이 그렇게 할 수있는 좋은 방법이라고 생각합니다.

관련 문제