2012-09-21 5 views
0

바인딩 내가 계산 CSS는 "예를 들어 내가 CSS를이 class="icon running 같이 할, 그것은 워크 플로우의 각 단계의 상태를 시각화 아이콘이 표시되고 무엇이지우기 CSS

this.iconCss = ko.computed(function() { 
    var css = { icon: true }; 
    css[this.state().toLowerCase()] = true; 
    return css; 
}, this); 

처럼 결합했다 또는 class="icon failed"

문제 내가 먼저, 내가 그것을 할당하는 것이 중요하지 않습니다이 class="icon queued"을 가지고 잘못 class="icon queued running" 될 것입니다 새 클래스를 실행하는 상태를 변경하는 경우, 그래서 늘 바인딩 CSS는 기존의 클래스를 취소한다는 것입니다 새로운 객체 리터럴은 이전 클래스가 지워지지 않을 것입니다. 한 가지 방법은 리터럴 객체를 만들고 반복 실행하고 모든 속성을 false로 설정합니다. 그게 내 마지막 수단이라면 css 바인딩을 지우는 방법으로 만들어진 클리너가 없다는 것입니다.

편집

:이 솔루션입니다하지만 난 그게

this.iconCssState = {}; 

this.iconCss = ko.computed(function() { 
    for (var index in this.iconCssState) { 
     this.iconCssState[index] = false; 
    } 

    this.iconCssState.icon = true; 
    this.iconCssState[this.state().toLowerCase()] = true; 
    return this.iconCssState; 
}, this); 
+0

이 대신 바인딩 '클래스'와 'ATTR'를 사용하려고 했습니까? ** attr : { 'class': somevalue} **처럼. 매번 전체 클래스 값을 대체해야합니다. 이 경우 계산 된 값은 'icon queued'와 같은 것을 반환해야합니다. – gbs

+0

그 문제는 IE가 class 속성에 문제가 있다는 것입니다. className 속성을 사용해야합니다. – Anders

+0

_class_를 따옴표로 묶어야합니다. 여기에 IE8에서 작동하는 [피들] (http://jsfiddle.net/nC7XY/2/)가 있습니다. – gbs

답변

1

당신은 나의 class 바인딩을 사용하여 원하는 무엇을 할 수 좋아하지 않는다. (녹아웃, 2.2의 다음 버전에서, 당신은 css 같은 방식으로 바인딩을 사용하실 수 있습니다.)

<div class="icon" data-bind="class: state().toLowerCase()"></div>