2012-10-25 3 views
4

크기 조정 가능한 jquery에 대한 녹아웃 바인딩을 만들려고합니다. 내 사용자 정의 바인딩은 뷰 모델에서 두 개의 서로 다른 관찰 가능 객체, 즉 "왼쪽"과 "너비"에 바인딩됩니다. 나는 왼쪽 핸들을 사용하여 내 DIV 크기를 조정할 때knockout 사용자 정의 할 수있는 2 개의 관찰 가능 항목에 대한 바인딩이 두 번 업데이트되었습니다.

<div class="layer" data-bind="resizable: {left: left, width: width}"> 
<div class="left ui-resizable-handle ui-resizable-w"><<<</div> 
<div class="right ui-resizable-handle ui-resizable-e">>>></div> 
</div> 

ko.bindingHandlers.resizable = { 
    init: function(element, valueAccessor, allBindingsAccessor, viewModel) { 
     var values = valueAccessor(); 
     $(element).resizable({ 
      handles: null, 
      resize: function(event, ui) { 
       values.left(ui.position.left); 
       values.width(ui.size.width); 
      } 
     }); 
    }, 
    update: function(element, valueAccessor, allBindingsAccessor, viewModel) { 
     var values = valueAccessor(); 
     $(element) 
      .css('left', values.left() + 'px') 
      .css('width', values.width() + 'px') 
      ; 
    } 
}; 

var vm = { 
    left: ko.observable(50), 
    width: ko.observable(300) 
    }; 

ko.applyBindings(vm); 

문제는이 명 관찰 가능한 업데이트하여 같은 바인딩 2 업데이트를 트리거 가져옵니다이다. 하나의 업데이트 만 실행하면됩니다.

이러한 종류의 바인딩에는 어떤 옵션이 있습니까? 둘 이상의 관측 가능에 바인딩하는 바인딩을 만드는 데 권장되는 방법은 무엇입니까?

내 실제 코드는 더 복잡하다,하지만 난 IV이 바이올린에 내 문제를 삶은 생각 :

http://jsfiddle.net/MatteS75/3dwVp/10/

답변

3

는 마이클 최저의 넉 아웃 Deferred Updates Plugin를 사용하여 시도 적이 있습니까? http://jsfiddle.net/jearles/3dwVp/11/

당신이해야 할 모든 녹아웃 후 자신의 .js 파일을 포함입니다 : 여기

업데이트 된 바이올린입니다.

<script type="text/javascript" src="knockout-2.1.0.js"></script> 
<script type="text/javascript" src="knockout-deferred-updates.js"></script>