2012-06-06 3 views
1

아래와 같이 데이터 바인딩 선언을 통해 showErrorConsole을 관찰 할 수 있습니까? 이 폭탄은 "k.apply는 기능이 없습니다"입니다. 여기에 인라인 함수를 사용할 수 있다는 것을 알았지 만, 그렇게 느껴지지 않고 많은 타이핑이 필요합니다.knockout.js 데이터 바인딩 선언에서 observable을 할당

HTML :

<div data-bind="event: { mouseover: showErrorConsole(true) }" ></div> 
<div id="devConsole" data-bind="visible: showErrorConsole"> 
     <div><button data-bind="click: showErrorConsole(false)">X</button></div> 
</div> 

뷰 모델 :

AjaxErrorsModel = (function() { 
    function Constructor() { 
     var self = this; 
     self.errors = ko.observableArray(); 
     self.hasErrors = ko.computed(function() { 
      return self.errors().length > 0; 
     }, self); 
     self.showErrorConsole = ko.observable(false); 
    }; 
    return Constructor; 
})(); 
+0

데이터 바인딩을 통해 관찰 가능한 속성을 설정하지 못하고 익명의 함수로 끝나는 것에 놀랐습니다. 그것은 포함하는 그런 기본적인 것 같이 보인다 - 나는 Knockout 작가가 그것을 왜 버렸는 지 궁금하다. – henry74

답변

0

이 작업을 수행하지만, 간단한 방법은 단지에이를 추가하는 것입니다 수 있도록 깔끔한 KO 트릭이있을 수 있습니다 귀하의 생성자 함수 :

self.showErrorConsoleIsFalse = function() { 
    self.showErrorConsole(false); 
}; 

: 그리고

<button data-bind="click: showErrorConsoleIsFalse"> 

하거나 마우스 오버 이벤트를 원한다면, 같은 생각 일 것이다 : 당신을 막는 아무것도

self.showErrorConsoleIsTrue = function() { 
    self.showErrorConsole(true); 
}; 

<div data-bind="event: { mouseover: showErrorConsoleIsTrue }" ></div> 

편집

물론 jQuery의 이벤트 관리 :

<div class="showConsole" ></div> 

$(".showConsole").hover(function() { 
    yourViewModel.showErrorConsole(true); 
}, function() { 
    yourViewMode.showErrorConsole(false); 
}); 
+0

감사합니다. 옵션을 살펴본 후에 나는 익명의 인라인 함수를 사용했다. 내가 원했던 것은 아니었지만 사용할 수있는 옵션 중에서는 내 취향에 가장 적합했습니다. 뷰포트에서 각 속성에 대한 추가 "setter"메서드를 추가하면 VM을 너무 많이 오염시키는 것처럼 보일 수도 있고 꺼질 수도 있습니다. – TugboatCaptain

관련 문제