2012-06-27 4 views
11

knockout.js 문서는 다음과 같이 바인딩 CSS를 보여줍니다 클릭변경 CSS 클래스는

<div data-bind="css: { profitWarning: currentProfit() < 0 }"> 
    Profit Information 
</div> 

나는 마우스 클릭에 CSS 클래스를 변경하는 데 적응해야합니다. 어떻게해야합니까? 아래의 답변을 바탕으로

,이 같은 일부 코드를 사용하고 있습니다 :

// CSS class to be applied 
<style> 
    .bigclass 
    { 
     width: 200px; 
    } 

</style> 

// Select list inside a jquery .tmpl 
<script id='criteriaRowTemplate' type='text/html'> 
    <tr> 
     <td> 
      <select data-bind='click: makeBig, css: {bigclass : SelectHasFocus() > 0}' /> 
     </td> 
    </tr> 
</script> 

// Knockout.js Viewmodel 
var CriteriaLine = function() { 
    this.SearchCriterion = ko.observable(); 
    this.SelectHasFocus = ko.observable(0); 

    // this method is called 
    makeBig = function(element) { 
     this.SelectHasFocus(1);    
    };   
}; 

그러나이 선택 목록의 폭을 확대하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

나는 당신이 가정을'ko.applyBindings (CriteriaLine())'어딘가에 문서를로드 한 후, 맞죠? 귀하의 코드는 [여기] (http://jsfiddle.net/6896T/4/)와 같이 작동합니다. 너의 대답에 대해 – Pakman

답변

1

가장 간단한 방법은 click binding을 사용하여 콜백에서 관찰 가능을 변경하는 것입니다. attr binding

+0

고마워. 특히 선택 목록과 관련된 경우 샘플 코드를 제공 할 수 있으면 매우 중요합니다. css 클래스를 사용하여 전체 선택 목록의 너비를 늘려야합니다. – Yasir

+0

몇 가지 샘플 코드를 추가했지만 작동하지 않습니다. 무슨 일이 일어날 지 아시겠습니까? – Yasir

+0

이것은 스택 오버 플로우에 대한 코드를 준비한 결과 일지 모르지만 makeBig는 private이며 바인딩에서 액세스 할 수 없습니다. 변경 makeBig = function ... this.makeBig = function ... – daedalus28

15

클릭 기능이 관찰 가능한 변수를 변경시키지 않았습니까?

<div data-bind="css: { myclass: newClass() == true }"> 
    Profit Information 
</div> 

<button data-bind="click: changeClass">Change Class</button> 

<script type="text/javascript"> 
    var viewModel = { 
     newClass: ko.observable(false), 
     changeClass: function() { 
      viewModel.newClass(true); 
     } 
    }; 
</script> 

참고 : example를 들어 동일한 요소에 clickcss을 결합 할 수 있습니다. 예를 들면 다음과 같습니다.

+0

@Pakman 답장을 보내 주셔서 감사합니다. 나는 당신과 비슷한 코드를 시도했지만 작동하지 않습니다. 원래 질문에 코드를 추가했습니다. 무엇이 잘못되었는지 알 수 있습니까? – Yasir

1

스크립트 태그에 문제가 있다고 생각합니다.

다음 링크에서 솔루션을 검색 할 수 있습니다 : http://jsfiddle.net/ZmU6g/3/

+2

아마도 jsfiddle 외에도 여기에 솔루션을 게시 할 수 있습니까? – InSane