2013-06-04 1 views
0

산업용 설비의 실시간 시각화를 위해 SignalR과 함께 ASP.NET MVC4 프로젝트에서 Knockout.js를 사용하고 있습니다. Google은 범위 또는 텍스트 상자가 뷰 모델에 데이터 바인딩되는 많은 페이지를 보유하고 있습니다. 2 ~ 10 초마다 서버에서 클라이언트 브라우저로 SignalR을 통해 새 값이 전송되고 뷰 모델의 값 (따라서 span, div 또는 텍스트 상자 입력의 텍스트)이 업데이트됩니다. 이것은 아주 잘 작동합니다. 내가 바꾸려고하는 것은 값이 변경 될 때마다 페이지에서 일종의 시각적 알림 (예 : jQuery - 값을 표시하는 DOM 요소 강조 표시)입니다.Knockout.js : 코드에서 값 변경시 텍스트 상자 강조 표시

knockout.js 이벤트 바인딩이 필요한 것 같지만, 볼 수있는 한 관련 뷰 모델 항목을 JS 함수에 전달할 수 있습니다. DOM 요소는 필요하지 않습니다. 가장 밝은 부분. 나는 그 생각을 알기를 바랍니다.

그래서 내가 필요로하는 것은 텍스트 입력의 값이 수동 사용자 입력이 아닌 "코드 숨김"에서 변경 될 때 함수를 트리거하는 방법입니다. 이 함수는 추가 처리를 위해 관련 DOM 요소를 제공해야합니다. 지금까지

내 코드 :

<table class="StatusRowList"> 
     <thead> 
      <tr> 
       <th>Parameter</th> 
       <th>Value</th> 
      </tr> 
     </thead> 
     <tbody data-bind="foreach: Items"> 
      <tr> 
       <td><a data-bind="attr: { href: '/Archive/Show/?StationId=' + StationId() + '&DataPointId=' + DpId() }"><span data-bind="text: Text"></span></a></td> 
       <td> 
        <span data-bind="text: UnitPrefix"></span> 
        <input data-bind="value: Value" /> 
        <span data-bind="text: UnitSuffix"></span> 
       </td> 
      </tr> 
     </tbody> 
    </table> 

관심의 라인이 두 스팬 사이의 "입력"입니다. 그 도움에 감사드립니다!

답변

0

바인딩 또는 ViewModel에서 관찰 가능을 설정 한 경우 구분할 방법이 없습니다. 당신은 편집 http://jsfiddle.net/a3fFa/

ko.extenders.eventDriven = function(target, options) { 
    var computed = ko.computed({ 
     read: target, 
     write: target 
    }); 
    computed.updatedFromEvent = ko.observable(false); 
    computed.onEvent = function(value) { 
     target(value); 
     computed.updatedFromEvent(true); 
    }  

    return computed; 
}; 

같은이 뭔가 고정하는 코 확장 작성해야합니다, 내가 BTW이위한 프레임 워크를했다을 https://github.com/AndersMalmgren/Knockout.Concurrency 을하지만 더 때 다른 detecing하는 것을 목표로 사용자가 충돌을 사용자에게 저장하고 표시합니다. http://jsfiddle.net/7atZT/1/

관련 문제