2011-05-09 3 views

답변

4

데이터 바인딩은 데이터가 UI에 표시되는 방법을 선언적으로 정의하는 것과 관련이 있습니다. 데이터 바인딩 기능을 지원하기 위해 단지 addEventListener을 연결하는 것 이상의 요구가 있기 때문에 좀 더 복잡합니다.

그것은 매우 강력한 기능은 실제로 더 이해하기 위해, 우리는 간단한에 "Hello World"응용 프로그램에서 볼 수있다 : 지금

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark"> 
    <s:HGroup> 
     <s:TextInput id="input" /> 
     <s:Label text="Hello {input.text}" /> 
    </s:HGroup> 

</s:Application> 

--keep 컴파일러 플래그이 응용 프로그램을 컴파일 해 봐 새로운 폴더 인 "bin-debug/generated"에서. 우리는 여기에

그 바인딩이 생성자에서 정의되고 호출되는 위치를 HelloWorld-generated.as

관심과 같습니다하여 HelloWorld 생성자에서, 사용자가 설정하는 전화를받을 조금 나중에

private function _HelloWorld_bindingsSetup():Array 
{ 
    var result:Array = []; 

    result[0] = new mx.binding.Binding(this, 
     function():String 
     { 
      var result:* = "Hello " + (input.text); 
      return (result == undefined ? null : String(result)); 
     }, 
     null, 
     "_HelloWorld_Label1.text" 
     ); 


    return result; 
} 

전문가 :

 _watcherSetupUtil.setup(this, 
       function(propertyName:String):* { return target[propertyName]; }, 
       function(propertyName:String):* { return HelloWorld[propertyName]; }, 
       bindings, 
       watchers); 

정말이 수행합니다

watchers[0] = new mx.binding.PropertyWatcher("input", 
              { propertyChange: true }, 
              [ bindings[0] ] , 
              propertyGetter); 
watchers[1] = new mx.binding.PropertyWatcher("text", 
              { change: true, 
               textChanged: true }, 
              [ bindings[0] ], 
              null); 

티를 ngs는 양방향 바인딩으로 더욱 복잡해집니다.

+0

바인딩으로 완료된 생성 된 ActionScript에서 추가하는 경우 +1입니다. – JeffryHouser

+0

멋진 답변, 추가해 주셔서 감사합니다! – Myk

4

데이터를 dsdsdsdsd -하지만 조금 차가 산책 단지 바로 가기 것을 말하는 것과 같습니다. 블록을 둘러 보는 것만으로도 큰 차이는 없습니다. 그러나 많은 아이템 렌더러와 순간적으로 달라질 수있는 많은 데이터 포인트로 복잡한 애플리케이션을 구축하는 경우 데이터 바인딩을 통해 수백 개의 addEventListener() 및 removeEventListener() 호출과 관련된 핸들러를 호출합니다. 그 맥락에서 볼 때, 정말 큰 일입니다.

+0

동의. 데이터 바인딩을 제대로 사용하면 매우 강력하고 표현력이 뛰어납니다. 데이터를 표시 할 UI 요소가있는 위치에 데이터 표시를 유지합니다. 코드를 크게 줄이고 UI에서 데이터를 분리 할 수 ​​있습니다. 프레임 워크의 가장 중요한 부분 중 하나 인 IMO는이 기능을 많이 사용합니다. 내게도 –

+0

+1. 바인딩은 매우 강력 할 수 있습니다. 내주의는 바인딩의 과도한 사용을 피하는 것입니다. 바인딩은 종종 과도하게 사용되며 특히 itemRenderers에서 성능 문제를 일으킬 수 있습니다. 바인딩을 사용하지 않도록 렌더러를 다시 작성하여 Flextras 클라이언트에 대한 많은 메모리 문제를 해결합니다. 예를 들어 Binding을 사용하는 Flex Framework 구성 요소는 없습니다. 그 이유가 있습니다. – JeffryHouser

+0

@ www.Flextras.com 그럼에도 불구하고 아이템 렌더러에서 데이터 바인딩을 피해야한다고 결코 말하지는 않을 것입니다. 나는 항상 아이템 렌더러에서 데이터 바인딩을 사용하고 perf 문제는 한번도 경험하지 못했습니다. 즉, 나는 그들이 존재할 수 있다고 믿는다. 특히 모바일에 갈 때. 이것은 "당신의 도구를 이해하고 교육받은 결정을 내리는"경우입니다. 모든 사람 (당신과 같은)이 사용할 구성 요소의 경우 데이터 바인딩을 피하는 것이 중요합니다. 구성 요소가 어떻게 사용될 것인지 알지 못합니다. 그러나 50 가지와 바인딩의 목록에서, 그것은 종종 괜찮습니다. –