Như Christian nói, bên file UiBinder ui.xml
bạn không phải lo lắng về cách gọi ensureInjected()
, những điều khoản XML sau thực hiện công việc:
<ui:with field='myStyle' type='com...MyStyle'/>
<div class='{myStyle.redBorder}'/>
Tất nhiên điều này là giả định rằng có một giao diện MyStyle
được xác định:
public interface MyStyle {
public String redBorder();
}
Bây giờ tôi đồng ý w Điều đó khiến bạn khó chịu khi cần thao tác mở rộng CssResource
bên ngoài mẫu UiBinder. Chính vì bạn phải chăm sóc gọi ensureInjected()
ở đâu đó trước khi sử dụng phiên bản MyStyle
với các tiện ích của bạn.
Cá nhân tôi sử dụng GIN để chèn các trường hợp mở rộng CssResource
bất cứ khi nào tôi cần chúng.Đó là cách bạn có thể triển khai nhà cung cấp GIN tùy chỉnh đảm bảo rằng ensureInjected()
được gọi trên CssResource
trước khi tiêm. Có ba bước liên quan có:
Tạo một giao diện cho MyStyle
cùng với một file CSS.
MyStyle.java
public interface MyStyle {
public String redBorder();
}
MyStyle.css
.redBorder { border: 1px solid red; }
Expose nó thông qua một phần mở rộng ClientBundle
.
Resources.java
public interface Resources extends ClientBundle {
@Source("MyStyle.css")
public MyStyle style();
}
Configure một phương pháp cung cấp GIN để tiêm trường hợp của bạn của MyStyle
.
ClientModule.java
public class ClientModule extends AbstractGinModule {
@Override
protected void configure() {
//...
}
@Provides MyStyle createStyle(final Resources resources) {
MyStyle style = resources.style();
style.ensureInjected();
return style;
}
}
Chúng tôi suôn sẻ tiêm dụ Resources
đây ở trên, có nghĩa là không gặp rắc rối nhiều hơn một accessor tĩnh gọi GWT.<Resources>create(Resources.class)
bất cứ nơi nào, nó chỉ tất cả xảy ra thông qua việc tiêm GIN.
Sau khi hoàn tất, bạn có thể tiêm các phiên bản MyStyle
khi cần.
Ví dụ (trong một số bối cảnh MVP):
private Widget widget;
@Inject
public SomeView(final MyStyle style) {
//...
widget = uiBinder.createAndBindUi(this);
widget.addStyleName(style.redBorder());
}
Nguồn
2011-04-04 08:55:09
Vâng, tôi cũng hiểu điều này nhưng: Tôi đang sử dụng tệp css toàn cầu và nó hoạt động tốt cho dù tôi có sử dụng secureInjected hay không. Đây là bí ẩn mà tôi đang cố giải quyết. – user198313