gwt
  • uibinder
  • 2012-01-20 4354 views 6 likes 
    6

    Khi sử dụng UiBinder, phương pháp ưa thích của việc tạo bố cục đơn giản như thế này là gì?FlowPanel so với HTMLPanel trong GWT UiBinder

    FlowPanel:

    <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> 
    <ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' 
        xmlns:g='urn:import:com.google.gwt.user.client.ui'> 
        <ui:style> 
        .outer { 
         display: table; 
         height: 100%; 
         width: 100%; 
        } 
        .inner { 
         background: #DDD; 
         display: table-cell; 
         vertical-align: middle; 
        } 
        </ui:style> 
        <g:FlowPanel styleName="{style.outer}"> 
        <g:FlowPanel styleName="{style.inner}"> 
         <g:Label ui:field="someLabel"/> 
        </g:FlowPanel> 
        </g:FlowPanel> 
    </ui:UiBinder> 
    

    HTMLPanel:

    <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> 
    <ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' 
        xmlns:g='urn:import:com.google.gwt.user.client.ui'> 
        <ui:style> 
        .outer { 
         display: table; 
         height: 100%; 
         width: 100%; 
        } 
        .inner { 
         background: #DDD; 
         display: table-cell; 
         vertical-align: middle; 
        } 
        </ui:style> 
        <g:HTMLPanel styleName="{style.outer}"> 
        <div class="{style.inner}"> 
         <g:Label ui:field="someLabel"/> 
        </div> 
        </g:HTMLPanel> 
    </ui:UiBinder> 
    

    Edit: Tôi biết họ sản xuất ra html tương tự khi render, tôi đang tự hỏi nếu có bất kỳ biện minh cho việc sử dụng một phong cách hơn cai khac.

    Các javadocs nói rằng FlowPanel là bảng điều khiển đơn giản nhất, nhưng tại điểm nào thì việc sử dụng HTMLPanel trở nên thích hợp hơn. ví dụ.

    <FlowPanel> 
        <FlowPanel> 
        <Widget> 
        </FlowPanel> 
        <FlowPanel> 
        <Widget> 
        </FlowPanel> 
    </FlowPanel> 
    

    vs

    <HTMLPanel> 
        <div> 
        <Widget> 
        </div> 
        <div> 
        <Widget> 
        </div> 
    </HTMLPanel> 
    

    Cảm ơn.

    UiBinder - HTMLPanel vs. div là một câu hỏi khá giống nhưng hỏi về cách sử dụng div so với HTMLPanel.

    Trả lời

    10

    Thực ra chúng sẽ hiển thị giống nhau trong trường hợp của bạn - div. Không có sự khác biệt trừ khi bạn bắt đầu thêm nhiều phần tử vào FlowPanel.

    Bạn có thể thử hành vi FlowPanel đây: http://examples.roughian.com/index.htm#Panels~FlowPanel

    Bạn nên sử dụng HTMLPanel trong những trường hợp khi bạn cần phải viết mã HTML riêng tùy chỉnh của bạn trên trang. Nó cho phép viết mã HTML bên trong thẻ HTMLPanel.

    Ví dụ: bạn không thể làm như vậy với FlowPanel.

    +0

    Ngoài cách chúng biểu hiện, đặc biệt là trong một trường hợp đơn giản như thế này, có ưu điểm hay nhược điểm nào khi chọn cái kia? – DTing

    +0

    Bạn có thể chỉ cần kiểm tra nó một mình - khởi động firebug trên firefox hoặc công cụ phát triển trong chrome để kiểm tra các yếu tố này. Tôi đã thử nó và tìm ra rằng họ làm cho cả hai như là thẻ div. Vì vậy, tôi giả sử bạn không phải lo lắng về các tác dụng phụ, và chỉ có thể tập trung vào khả năng đọc và bảo trì mã của bạn. –

    4

    Gần đây tôi đã đọc Tags First GWT Programming. Dường như với tôi, rằng kỹ thuật ông mô tả sẽ cho phép bạn có quyền kiểm soát tốt hơn đối với việc hiển thị cuối cùng của trang của bạn, đồng thời duy trì các lợi thế của GWT.

    Tôi nghĩ rằng sự phân đôi mà bạn đang hỏi về giữa FlowPanel và HTMLPanel không thực sự là câu hỏi đúng. Thay vào đó, tốt nhất là nhận ra rằng chúng có nghĩa là cho những thứ khác nhau.

    HTMLPanel có khả năng nhiều hơn FlowPanel. Khi bạn cần phải tự động thêm và xóa các tiện ích được nhúng trong một số html tùy chỉnh, hãy sử dụng HTMLPanel. Nếu bạn chỉ muốn một số tiện ích con căn chỉnh cùng nhau trên trang với luồng html thông thường (như một số văn bản và hình ảnh) thì hãy sử dụng FlowPanel.

    Lời khuyên cá nhân của tôi sẽ là sử dụng điều đơn giản nhất có thể làm những gì bạn cần.

    0

    Tôi đề xuất ví dụ thứ hai. Nếu có thể, bạn nên sử dụng thẻ HTML thuần tuý như "div" trên một tiện ích con như "FlowPanel" vì phí phía trên có tiện ích logic không được sử dụng.

    Điều này có vẻ ít quan trọng trước nhưng nó giúp bạn tiết kiệm rất nhiều đau đầu (rò rỉ bộ nhớ, hoạt động gquery, ...) khi bạn phải xử lý nhiều mục.

    Các vấn đề liên quan