2017-02-10 5 views
0

녹아웃 관측 값을 업데이트하는 데 약간의 문제가 있습니다. linkClick에서 showMenu로 값을 전달해야합니다.녹아웃 관찰 가능 업데이트

이 showMenu ("값")처럼 showMenu를 수동으로 업데이트하면 값이 정상적으로 전달됩니다. 그러나 동적 인 가치가 있어야합니다. 이것은 본질적으로 내 코드입니다.

//View 
<a data-bind="click: linkClick" data-sec="Value">Click Me</a> 

<!-- ko if: showMenu() === 'Value' --> 
    <ul class="Menu"> 
     <li>Link 1</li> 
     <li>Link 2</li> 
    </ul> 
<!-- /ko --> 

define(
    [''], 
    function() { 
    var _this = this; 
    return { 

     showMenu: ko.observable(""), 
     linkClick: function(data, event) { 

      var element = event.target,      
       Menu = $(element).attr('data-sec'); 

      var myMenu = this.showMenu(); 
      this.showMenu(Menu); 

     } 
    } 
}); 

필자는 기능이 오류없는 그러나 이것은 _this.showMenu()를 생성 전역에 _this 를 사용하는 대신 시도. 도와주세요.

추신. 첫 번째 함수 정의 안에 모든 것을 써야합니다.

+0

ShowMenu는 (?)의 값이 어디에서 온 것입니다해야합니까? – jtabuloc

+0

'var _this = this;'의'this'는 아무 것도 가리 키지 않습니다. (물론 실제로는 윈도우 객체를 가리 킵니다.) 'var _this = {_here_the_litteral_definition_of_some_object_with_methods_}'라고 쓰면,'_this.showMenu()'가 작동합니다. 또한 패키지를 정의하는 경우 자주 정의하는 모듈의 변수 이름으로 _this 대신 "exports"를 사용하는 것이 좋습니다. – miellaby

답변

2

사용 data (당신의 ViewModel이되는 것입니다) 대신 this

function vm() { 
 
    return { 
 
    showMenu: ko.observable(""), 
 
    linkClick: function(data, event) { 
 
     var element = event.target, 
 
     Menu = $(element).attr('data-sec'); 
 

 
     // use data instead of this 
 
     data.showMenu(Menu); 
 
    } 
 
    } 
 
} 
 

 
ko.applyBindings(vm());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 
<a data-bind="click: linkClick" data-sec="Value">Click Me</a> 
 
<!-- ko if: showMenu() === 'Value' --> 
 
<ul class="Menu"> 
 
    <li>Link 1</li> 
 
    <li>Link 2</li> 
 
</ul> 
 
<!-- /ko -->

+0

완벽하게 작동했습니다! –

관련 문제