gridx模块不会在我的rational / worklight环境中加载

时间:2014-01-24 16:33:35

标签: dojo ibm-mobilefirst dojo.gridx

当我尝试使用gridx / grid的创建来加载模块时,我的脚本会转到那个奇怪的地方,在那里错误由看起来像gobbledy gook的代码处理。 如果我创建没有modules属性的网格,行显示就好了。我正在使用dojo 1.9(与RAD一起提供)在理性应用开发者9.1中使用worklight 6.1进行编码。 我的dojo包含指定如下:

function dojoInit() {
    require([ "dojo/ready", "dojo/parser", "dojox/mobile", "dojo/dom",
        "dijit/registry", "dojox/mobile/ScrollableView",
    "dojox/mobile/Heading", "dojox/mobile/ScrollablePane",
    "dojox/mobile/Pane", "dojox/mobile/TextArea", "dojox/mobile/ContentPane", 
    "dojo/Deferred", "dojo/store/Memory", 
    "gridx/Grid", "gridx/core/model/cache/Sync", "dojox/mobile/Container",
    "gridx/modules/SingleSort"], 
    function(ready) { ...

以下是我的样式表链接:

<link rel="stylesheet" href="css/dojo.css" />
<link rel="stylesheet" href="css/claro.css" />
<link rel="stylesheet" href="css/document.css" />
<link rel="stylesheet" href="css/Gridx.css" />
<link rel="stylesheet" href="css/Gridx_rtl.css" />

我将css文件从gridx / resources / claro / Gridx.css和dojo工具包库中的其他位置暂时移动到已知的相对位置,以消除无法解析css文件的可能性。我正在指定div中的'claro'类,其中放置了这个网格。在任何一种情况下,网格的行为都没有区别。

我的网格是这样创建的:

toStore=new dojo.store.Memory({ idProperty: 'PICYNO', data: resultSet });
toColumns=[
    { id: 'PICYNO', field: 'PICYNO',    name: 'Cycle'       , width: '80px' , editable: true },
    { id: 'PIDSC1', field: 'PIDSC1',    name: 'Description' , width: '300px', editable: true },
    { id: 'PICYCS', field: 'PICYCS',    name: 'Status'      , width: '60px' , editable: true },
    { id: 'PPICSDJ',field: 'PPICSDJ',   name: 'Date'        , width: '80px' , editable: true },
    { id: 'PICYIT', field: 'PICYIT',        name: 'Items'       , width: '60px' , editable: true },
    { id: 'PICYLO', field: 'PICYLO',    name: 'Locations'   , width: '60px' , editable: true }
];
var cacheClass = "gridx/core/model/cache/Sync";
var tsGrid = new gridx.Grid({
    id: 'idHeaderGrid',
    cacheClass: cacheClass,
    store: toStore,
//  modules:[modules.SingleSort, modules.SelectRow],
//  modules:[gridx.modules.SingleSort],
//  modules:[gridx/modules/SingleSort],
//  modules: [ SingleSort ],
//  modules: [ Sort ],
    structure: toColumns
}); 
tsGrid.placeAt('idGridContentPane');
tsGrid.startup();

如果我按照你的意见评论所有指定'modules:'的行,那么就会显示网格(但它很难看,好像根本没有应用样式表。)

如果我尝试指定标准排序模块的任何变体,此功能将为tank。我知道这可能是因为我没有正确指定我的环境,但我看不出如何。

我正在使用的任何版本的任何已知问题?任何建议都表示赞赏。

---------更新了------------

我已经进步到可以显示网格的程度,但格式仍然是关闭的。

根据非Worklight项目的实验结果,我可以用模块实现网格,并且无论使用哪种类型的项目(web或worklight),我都能够解决dojo和Gridx对象即使javascript资源配置不同,我决定尝试使用本地require语句在直接上下文中指定dojo模块并且它有效。 worklight中的原始dojo配置在main.js对象中进行了配置,该对象是使用worklight应用程序自动生成的。它看起来像这样:

function wlCommonInit() {
    require([ "layers/core-web-layer", "layers/mobile-ui-layer" ], dojoInit);
}
function dojoInit() {
    require([ "dojo/ready", "dojo/parser", "dojox/mobile", "dojo/dom",
            "dijit/registry", "dojox/mobile/ScrollableView",
            "dojox/mobile/Heading", "dojox/mobile/ScrollablePane",
            "dojox/mobile/Pane", "dojox/mobile/TextArea", "dojox/mobile/ContentPane", 
            "dojo/Deferred", "dojo/store/Memory", "dojox/mobile/Container",
            "gridx/modules/SingleSort", "gridx/modules/ColumnResizer", "gridx/modules/RowHeader"
            ], 
            function(ready) {
                ready(function() {
                ccInit();
        });
    });
}

我从main.js中删除了模块声明,并将它们添加到创建网格的ccInit.js应用程序中,如下所示:

    function populateGrid() {
        require([
            'dojo/store/Memory',
            'gridx/Grid',
            'gridx/core/model/cache/Sync',
            'gridx/modules/SingleSort',     
            'gridx/modules/ColumnResizer',
            'gridx/modules/RowHeader'
             ], function(Store, Grid, Cache, Sort, ColumnResizer, RowHeader) {
. . .
        var tsGrid = new gridx.Grid({
            id: 'idHeaderGrid',
            cacheClass: Cache,
            store: toStore,
            modules: [ Sort, ColumnResizer, RowHeader ],
            structure: toColumns,
            selectRowTriggerOnCell: true
        }); 
... 

如图所示,在即时需求上下文中创建网格时,会成功创建网格。如果我使用非直接方法,那么很多dojo调用甚至没有模块的网格都可以工作。

尽管如此,syles还是搞砸了。列标题为空白,表格看起来不像克拉风格的网格。我确信我已经在html标题中正确设置了css包含(使用我的工作web项目作为模型)。是否有一些工作灯初始化或“皮肤”覆盖,这搞砸了这个?

感谢您的任何评论。

---解决方法是在本地引用所有类。

我通过在common \ css文件夹中创建gridx.css解决了样式表的问题,然后我通过用导入的css源的复制/粘贴替换每个@import来编辑它。所以我的gridx.css是所有导入的所有源代码的合并。我指向我的标题链接中的css \ gridx,我得到了合理的结果。

总而言之,我必须明确要求自定义函数中的gridx类,而不是main.js中的dojo require语句。我必须合并所有gridx样式并在本地引用它们。 gridx.css和其他样式表未通过相对路径解析的问题包括dojo工具包的这一点似乎是一个bug。这些样式表似乎是在运行时生成的服务器中加载的,如下所示的控制台消息所示:

无法加载资源:服务器响应状态为404(未找到)http://myWLdevServer.mycomputer.local:10080/JustGridx/apps/services/preview/JustGridx/common/0/default/dojo/gridx/resources/claro/Gridx.css

如果开发人员应该使用某种服务器配置来指向那些CSS文件,那么我就没有看到它。

如果有人认为这是一个最坏的错误或者不直观,并且应该记录在最好的情况下,我将离开这篇文章未解决。

1 个答案:

答案 0 :(得分:0)

来自user3208130的评论:

  

很抱歉没有跟进这一切。我终于工作了   通过不导入任何东西来解决问题。我复制了主要的   gridx.css从gridx \ resources到我的项目,然后为每个   在该文件中列出的导入,我从中复制/粘贴源   gridx集合中的各个位置以及所有位置   claro css文件,因为gridx只使用该字体。我不得不关掉   因为claro看起来很糟糕,主题切换取决于设备   windows8和android否则。

     

我知道这没有任何意义,但我尝试了我可以想象的导入的相对和显式路径的每个变体   html标头和主css文件中的语句   没有其他工作。我怀疑没有复制css文件   在创建设备环境时自动生成,但我无法创建   证明了这一点。