2012-10-12 6 views
1

우리 애플리케이션은 GIN을 사용하여 GWT 리소스 번들을 동적으로 인스턴스화합니다. 이것은 다른 표시 모드에서 런타임에 다른 스타일 시트를로드 할 수 있도록하기 위해 수행됩니다. 일반적으로 이는 표준 GWT.create(MyAppResources.class)과 반대로 MyApp.ginjector.getResources()과 같은 것을 사용하여 리소스의 싱글 톤 인스턴스를 만들 수 있음을 의미합니다.UiBinder xml에서 GIN 생성 리소스 사용

이것은 UiBinder 코드를 제외한 모든 항목에서 잘 작동합니다. 우리는 <ui:with ref="res" type="com.company.MyAppResources" />을 사용했으며 MyAppResources의 인스턴스는 GWT.create이 아닌 GIN으로 생성되기를 바랍니다.

GWT UiBinder docs에 따르면이 문제를 처리하는 데는 두 가지 방법이 있습니다. 구성 요소에 @UiField(provided=true) 또는 @UiFactory을 사용하십시오. 이 두 가지 방법 모두 바람직하지 않습니다. 왜냐하면 내 팀을 포함한 사람들이이 상용구 코드를 모든 위젯에 저장해야한다는 것을 기억해야하기 때문입니다. 더욱이 생성 코드를 생략하면 GWT.create이 우리가 원하는 리소스가 아닌 리소스의 인스턴스를 생성하기 때문에 모든 것이 여전히 작동하는 것처럼 보입니다.

저는 모든 구성 요소가 사용할 GIN에 위임하는 일종의 글로벌 @UiFactory 메서드를 만드는 방법을 찾고 있습니다. 또는 특정 클래스에 대해 GWT.create에 연결하고 클라이언트 측 런타임 코드를 사용하면 인스턴스를 만들 수 있습니다. 객체 생성을 내 정적 인 Ginjector에 위임 할 수 있습니다. 정적 필드 ginjectorcom.company.MyApp이있는 경우

답변

3

, 당신은 사용할 수 있습니다 : 다음

<ui:import field="com.company.MyApp.ginjector" /> 

와 (자바 ginjector.getResources().style().foo() 가정) :

<span class="{ginjector.getResources.style.foo}"> 
+0

오, 즉 영리, I 피난처 ' 이전에 ui : import를 사용했습니다. 청결을 위해 스타일 및 기타 정적 리소스를 UiBinder 파일에 제공한다는 명시적인 목적으로 클래스를 만들 수 있습니다. –

+0

내가 생각한 또 다른 솔루션은 위젯을위한 공통 기본 클래스 (예 : MyAppComposite)를 만드는 것입니다.이 클래스는 특수하게 작성해야하는 경우 리소스 또는 잠재적으로 위젯에 대한 UiFactory 메소드를 제공 할 수 있습니다. –

+0

으로 바뀌 었습니까? 나는 GWT 2.5.1을 사용하고 있는데, 작동하려면