Dojo 树网格的样式不正确

Posted

技术标签:

【中文标题】Dojo 树网格的样式不正确【英文标题】:Dojo Tree Grid not being styled correctly 【发布时间】:2014-02-25 21:41:31 【问题描述】:

我使用 Brad Balassatis 的这篇博文创建了一个 Dojo 树网格:http://xcellerant.net/2013/05/28/categorized-dojo-grid/

网格已创建,但样式完全关闭。

应该是这样的:

但它看起来像这样:

这些是我尝试过的:

已使用“网络”选项卡中的 Chrome 开发工具验证 CSS 已加载 已验证最后加载网格的 CSS 注释掉 bootstrap CSS 以验证 dojo 和 bootstrap 没有冲突 将资源文件从 CC 移动到 Xpage 并返回(与预期没有区别) 禁用该控件的主题

这里是加载的资源:

    <xp:this.resources>
    <xp:dojoModule name="dojox.grid.TreeGrid"></xp:dojoModule>
    <xp:dojoModule name="dijit.tree.ForestStoreModel"></xp:dojoModule>
    <xp:dojoModule name="dojo.data.ItemFileWriteStore"></xp:dojoModule>
    <xp:styleSheet href="/.ibmxspres/dojoroot/dojox/grid/resources/Grid.css"></xp:styleSheet>
    <xp:styleSheet href="/.ibmxspres/dojoroot/dijit/themes/tundra/tundra.css"></xp:styleSheet>
    <xp:styleSheet href="/.ibmxspres/dojoroot/dojox/grid/resources/tundraGrid.css"></xp:styleSheet>
</xp:this.resources>

这是在客户端 onClientLoad 事件中加载网格的代码

var layout = [
   name: "Arrival Date", field: "state", width: "200px",
   name: "PO Number", field: "poNumber", width: "200px",
   name: "PO Type", field: "typePO", width: "200px"
];

var jsonStore = new dojo.data.ItemFileWriteStore( url: "xReadCategorizedView.xsp");

var treeModel = new dijit.tree.ForestStoreModel(
  store: jsonStore,
  query: type: 'state',
  rootId: 'personRoot',
  rootLabel: 'People',
  childrenAttrs: ['children']
);

var grid = new dojox.grid.TreeGrid(
  treeModel: treeModel,
  structure: layout
, 'treeGrid');

grid.startup();

dojo.connect(window, "onresize", grid, "resize");

按要求完成代码。

包含网格的CC:

    <?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex" dojoTheme="true" dojoParseOnLoad="true">

    <xp:this.afterPageLoad><![CDATA[#javascript:if(userStore == "vendor" & vendorBean.vendorNum == null)refreshVendorBean();]]></xp:this.afterPageLoad>
    <xp:this.resources>
        <xp:dojoModule name="dojox.grid.TreeGrid"></xp:dojoModule>
        <xp:dojoModule name="dijit.tree.ForestStoreModel"></xp:dojoModule>
        <xp:dojoModule name="dojo.data.ItemFileWriteStore"></xp:dojoModule>
        <xp:styleSheet href="/.ibmxspres/dojoroot/dojox/grid/resources/Grid.css">    </xp:styleSheet>
        <xp:styleSheet href="/.ibmxspres/dojoroot/dijit/themes/tundra/tundra.css"></xp:styleSheet>
        <xp:styleSheet     href="/.ibmxspres/dojoroot/dojox/grid/resources/tundraGrid.css"></xp:styleSheet>
    </xp:this.resources>



    <xe:keepSessionAlive id="keepSessionAlive1" delay="300"></xe:keepSessionAlive>
    <xp:br></xp:br>
    <xp:panel>
        <xp:div style="text-align:left">
            <xp:label value="By Arrival Date" id="label1"
                style="font-weight:bold;font-style:italic;color:rgb(0,0,64);font-size:14pt;padding-left:3.0em">
            </xp:label>
        </xp:div>
        <xp:div style="width:100%;height:1000px">
            <div id="treeGrid"></div>
        </xp:div>


    </xp:panel>
    <xp:eventHandler event="onClientLoad" submit="false">
        <xp:this.script><![CDATA[var layout = [
   name: "Arrival Date", field: "state", width: "200px",
   name: "PO Number", field: "poNumber", width: "200px",
   name: "PO Type", field: "typePO", width: "200px"
];           
var jsonStore = new dojo.data.ItemFileWriteStore( url: "xReadCategorizedView.xsp");

var treeModel = new dijit.tree.ForestStoreModel(
  store: jsonStore,
  query: type: 'state',
  rootId: 'personRoot',
  rootLabel: 'People',
  childrenAttrs: ['children']
);

var grid = new dojox.grid.TreeGrid(
  treeModel: treeModel,
  structure: layout
, 'treeGrid');

grid.startup();

dojo.connect(window, "onresize", grid, "resize");]]></xp:this.script>
    </xp:eventHandler>
    </xp:view>

包含包含网格的 CC 的 XPage:

    <?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xc="http://www.ibm.com/xsp/custom" xmlns:xe="http://www.ibm.com/xsp/coreex">

    <xp:this.beforePageLoad><![CDATA[#javascript:if(session.getEffectiveUserName() == "Anonymous")
    context.redirectToPage("Home.xsp")
]]></xp:this.beforePageLoad>
    <xc:layout>
        <xc:Submitted_By_Arrival_CC /></xc:layout></xp:view>

所有内容都包含在其中的布局 CC。使用 Bootstrap 2

    <?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xc="http://www.ibm.com/xsp/custom">
    <link href='http://fonts.googleapis.com/css?family=Bitter'
        rel='stylesheet' type='text/css' />
    <!-- Fix for IE8 -->
    <xp:text escape="false" id="computedField1"
        rendered="#javascript:context.getUserAgent().isIE(0,8)">
        <xp:this.value><![CDATA[#javascript:"<style type='text/css'>body padding-top: 45px; padding-bottom: 40px; </style>"]]></xp:this.value>
    </xp:text>

    <div class="container-fluid">
        <xc:header showCategories="true" />
        <div class="row-fluid">

            <div id="mainContent" class="span12">
                <xp:callback />
            </div>
            <div id="rightColumn" class="span0 visible-desktop">
                <xp:callback facetName="rightColumn" />
            </div>
        </div>
    </div>
</xp:view>

我的主题,最初基于来自 openNTF 的 Collaboration Today:

<theme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="platform:/plugin/com.ibm.designer.domino.stylekits/schema/stylekit.xsd">

<resources>
    <styleSheet type="text/css" href="bootstrap-2.0.4.combined.min.css"/>
    <styleSheet type="text/css" href="custom.css"/>

    <script src="jquery-1.7.1.min.js" clientSide="true" type="text/javascript"/>
    <script src="bootstrap-2.0.4.min.js" clientSide="true" type="text/javascript"/>
    <script src="/custom.js" clientSide="true" type="text/javascript"/>
    <metaData name="viewport" content="width=device-width, initial-scale=1,  maximum-scale=1"/>
</resources>

<control override="false">
    <name>ViewRoot</name>
    <property>
        <name>pageTitle</name>
        <value>Harmons Purchase Orders</value>
    </property>
</control>
<control>
    <name>ViewRoot</name>
    <property>
        <name>pageIcon</name>
        <value>/favicon.ico</value>
    </property>
</control>

【问题讨论】:

我自己尝试并获得正确的 css。请贴出整个xpages的源代码 您是否使用“使用运行时优化的 JavaScript 和 CSS 资源”属性? @FrantisekKossuth - 更改此设置没有区别。 @adminfd - 我添加了包括父页面在内的完整代码。我唯一没有包括的东西是 xAgent,除了视图位置之外,它与 Brad 的博客文章没有任何变化。感谢您的帮助 你是不是也在加载通用的dijit.css? 【参考方案1】:

我测试了示例代码,发现在主题的&lt;theme&gt;标签中添加这个属性时问题得到解决:

extends="webstandard"

【讨论】:

我也遇到了同样的问题,我有一个自定义主题,并且正在使用扩展默认设置,如何在不使用扩展的情况下解决这个问题呢?

以上是关于Dojo 树网格的样式不正确的主要内容,如果未能解决你的问题,请参考以下文章

Dojo Datagrid:如何更改第一行的样式?

在 Dojo 数据网格中添加一行

Dojo 增强网格嵌套排序无法排序

dojo增强了网格服务器端分页无法正常工作

DoJo 增强的网格动态更新约束不起作用

Dojo 网格嵌套 json