2014-10-29 7 views
1

게시 된 속성이 inputValue 인 사용자 지정 폴리머 요소가 있습니다.게시 된 속성이있는 다트 폴리머 요소 : 자체 통지를 피하는 방법

구성 요소가 inputValue을 수신 대기하고 변경하면 새 값이 내부 논리에보고됩니다.

반대 방향으로도 동일하게 수행됩니다. 요소는 내부 논리 변경 내용을 수신하고 inputValue에 새 값을 설정합니다.

inputValue으로 새 값을 설정하면 관찰 시스템이 모든 수신기를 알리지 만 요소 자체는 수신기입니다.

그 자체로 변경된 사항에 대해 요소에 통지하지 않으려합니다. 다음은 사용자 정의 요소 다트 코드

:

@CustomTag("codemirror-input") 
class CodemirrorInput extends PolymerElement { 

    @published 
    String mode; 

    @published 
    String inputValue; 

    CodemirrorInput.created() : super.created(); 

    void ready() { 

    Map options = { 
     'mode': mode 
    }; 

    GradeCodeMirror editor = new GradeCodeMirror.fromElement(
     $['codemirror'], options: options); 

    onPropertyChange(this, #inputValue,(){ 
     editor.setOption("value", inputValue); 
    }); 

    editor.onChange.listen((_){ 
     inputValue = editor.getDoc().getValue(); 
    }); 
    } 
} 
+0

여기에서 무슨 일이 일어나고 있는지 아직도 파악하기가 어렵습니다. 당신의 코드에서'value'를 업데이트 할 수는 없습니까? 그러면 Polymer가 업데이트를 해결하도록 할 수 있습니까? 'editor.onChange.listen'을 불게하는 것은 무엇입니까? –

+0

Codemirror는 DIV를 래핑하고 구문 강조를 제공하는 소스 코드 편집기로 만드는 외부 라이브러리입니다. JS 라이브러리의 Dart에 이식하는 방법을 사용하고 있습니다. editor.onChange.listen은 사용자가 소스 코드 편집기에서 코드를 수정할 때 codemirror 편집기에 의해 시작됩니다. – Fedy2

+0

이 값이 'value'와 동일한가요? –

답변

0

값이 실제로 변경하지 않은 inputValueChanged 화재에서 모든 경우에, 나는 그것이 이전 값과 새 값이 다를 경우에만 발사 생각하는 이유가 궁금합니다. 정말 이런 식으로 작동하지 않을 경우 하지만 당신은이를 확인하실 수 있습니다 자신

editor.onChange.listen((_){ 
    var val = editor.getDoc().getValue(); 
    if(inputValue != val) { 
    inputValue = val; 
    } 
}); 
onPropertyChange(this, #inputValue,(){ 
    editor.setOption("value", inputValue); 
}); 

이 방법은 모든라고 요소

void inputValueChanged(oldValue, newValue) { 
    editor.setOption("value", inputValue); 
} 

에 메서드를 추가하여 단순화 할 수있다 시간은 inputValue입니다.