2014-02-21 6 views
1

처음으로 확인 : this fiddle을 확인하십시오.knockout을 통해 요소를 정렬 한 후 cleditor에 대한 사용자 지정 바인딩이 실패 함

나는 Knokout sortable 라이브러리로 만든 정렬 가능한 요소 배열을 가지고 있습니다. 처음에 바인딩을 적용 할 때 cleditor가 잘 초기화됩니다.

그러나 정렬 가능한 요소를 정렬 할 때 cleditor가 다시 초기화되지 않습니다 (어떤 일이 발생했는지는 확실치 않지만 cleditor가 실패 함). cleditor는 Firefox에서 실제 값 대신 "true"를 표시하고 다른 모든 브라우저에서는 아무것도 표시하지 않습니다.

문제가 어디에 있는지, 사용자 정의 바인딩, jQuery-UI 또는 Knockout 정렬 가능 라이브러리인지 여부를 파악하려고합니다.

내 콘솔에 오류가 표시되지 않습니다.

ko.bindingHandlers.cleditor = { 
     init: function(element, valueAccessor, allBindingsAccessor) { 

      var modelValue = valueAccessor(), 
       allBindings = allBindingsAccessor(); 

      var $editor = jQuery(element).cleditor({ 
       height: 50, 
       controls: "bold italic underline | bullets numbering | undo redo" 
      }); 

      $editor[0].change(function() { 

       var elementValue = $editor[0].doc.body.innerHTML; 
       if (ko.isWriteableObservable(modelValue)) { 
        modelValue(elementValue); 

       } else { 
        if (allBindings['_ko_property_writers'] && allBindings['_ko_property_writers'].cleditor) { 
         allBindings['_ko_property_writers'].cleditor(elementValue); 
        } 
       } 
      }); 
     }, 

     update: function(element, valueAccessor) { 
      var value = ko.utils.unwrapObservable(valueAccessor()) || '', 
       $editor = jQuery(element).cleditor(); 

      if ($editor[0].doc.body.innerHTML !== value) { 
       //$editor[0].doc.body.innerHTML = value; 
       $editor[0].doc.body.innerHTML = value; 
       $editor[0].focus(); 
      } 
     } 
    }; 

어떻게 분류기를 정렬 한 후에도 분류기를 작동하게 할 수 있습니까?

나는 this resource을 찾았지만, 그 주제에서 말한 것처럼 코드에서 아무 것도 발견되지 않았습니다.

+0

다음 init 함수에서 : refresh<textarea>에서 편집기의 값을 업데이트하기 때문에

jQuery(document).on('sortstop', function(event, ui) { if (jQuery.contains(ui.item[0], element)) { jQuery(element).cleditor()[0].refresh(); } }); 

는 또한, 동기화에 <textarea> 값을 유지하는 update 기능의 변화를 만들어 https://groups.google.com/forum/?fromgroups#!topic/cleditor/6W36CyPsaVU 이 토론에서 내가 가지고있는 문제를 정확하게 재현하지만 내가 refresh() 함수 오류가 아니므로 그것을 사용할 수 없습니다. 1.4.4 cleditor 버전을 사용합니다. –

+0

다음은 Knockout과 아무 관련이 없음을 보여주기 위해이 예제를 정리 한 것입니다. http://jsfiddle.net/mbest/rh8c2/ –

답변

4

제공하신 링크가 도움이되었습니다. CLEditor refresh 방법은 드래그 한 후 업데이트하는 올바른 방법입니다. 정렬 가능한 stop 이벤트를 사용하여 정확한 시간에 완료하면됩니다.

http://jsfiddle.net/mbest/rh8c2/1/

stop: function(event, ui) { 
    $(ui.item).find("textarea").cleditor()[0].refresh(); 
} 

는 또한 결합하여 cleditor에이 통합했다.

$editor[0].updateTextArea(); 

http://jsfiddle.net/mbest/jw7Je/7/

+0

백만 감사합니다. 24 시간 이상 고쳐주었습니다. 그러나 나는 그것이 cleditor쪽에 있어야한다고 생각했다. –