2

私のプロジェクトでは、 gwt 2.5.1gxt 3.0.1を使用しています。ツリーを作成します。

    protected void createTree(TreeStore<ProjectExtended> treeStore) {

    ValueProvider<ProjectExtended, SafeHtml> provider = new ValueProvider<ProjectExtended, SafeHtml>() {

        @Override
        public void setValue(ProjectExtended object, SafeHtml value) {

        }

        @Override
        public SafeHtml getValue(ProjectExtended object) {

            if(object == null) return SafeHtmlUtils.EMPTY_SAFE_HTML;

            if (!object.getActive()) {
                return SafeHtmlUtils.fromTrustedString(
                        "<span class=\"projectNotActive\">" + object.getName() + 
                        "</span> " + "<span class=\"dictIdText\"> ( " + 
                        object.getId() + " / " + object.getParentId() + " ) </span>");
            } else {
                return SafeHtmlUtils.fromTrustedString(
                        object.getName() + "<span class=\"dictIdText\"> ( " +
                        object.getId() + " / " + object.getParentId() + " ) </span>");
            }
        }

        @Override
        public String getPath() {
            return "name";
        }
    };

    Tree<ProjectExtended, SafeHtml> tree = new Tree<ProjectExtended, SafeHtml>(treeStore, provider);
    tree.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);

    add(tree);
}

アクティブでないノードのスタイルを変更しようとしています。しかし、ブラウザが間違って表示するため、この問題を解決できません!

http://i.stack.imgur.com/0Jmdq.png

これを解決する方法はありますか?

4

1 に答える 1

2

問題を解決しました。参考になった記事はこちら

コードの簡単な例があります。

  1. 継承されたクラス AbstractCell を作成し、render メソッドをオーバーライドする必要があります。

    public class SimpleAbstractCell extends AbstractCell<String> {
    
        @Override
        public void render(Context context, String value, SafeHtmlBuilder sb) {
            /*
            * Always do a null check on the value. Cell widgets can pass null to
            * cells if the underlying data contains a null, or if the data arrives
            * out of order.
            */
            if (value == null) {
                return;
            }
    
            SafeHtml safeValue = SafeHtmlUtils.fromTrustedString(value);
            sb.append(safeValue);
        }
    }
    
  2. ツリーの作成中に、contentCell を宣言する必要があります。

    protected void createTree(TreeStore<ProjectExtended> treeStore) {
    
        ValueProvider<ProjectExtended, String> provider = new ValueProvider<ProjectExtended, String>() {
    
            @Override
            public void setValue(ProjectExtended object, String value) {
    
            }
    
            @Override
            public String getValue(ProjectExtended object) {
    
                if(object == null) return "";
    
                if (!object.getActive()) {
                    return 
                        "<span class=\"projectNotActive\">" + object.getName() + 
                        "</span> " + "<span class=\"dictIdText\"> ( " + 
                        object.getId() + " / " + object.getParentId() + " ) </span>";
                } else {
                    return 
                        object.getName() + "<span class=\"dictIdText\"> ( " +
                        object.getId() + " / " + object.getParentId() + " ) </span>";
                }
            }
    
            @Override
            public String getPath() {
                return "name";
            }
        };
    
        Tree<ProjectExtended, String> tree = new Tree<ProjectExtended, String>(treeStore, provider);
        tree.setCell(new SimpleAbstractCell());
        tree.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
    
        add(tree);
    }
    

それで全部です。smbに役立つことを願っています。

于 2013-10-30T07:18:35.827 に答える