xpages - 如何返回 XPage 上 Dojo DataGrid 中可编辑列的值?

标签 xpages dojox.grid.datagrid

我在 Dojo DataGrid 中有一个可编辑的优先级列。在保存用户的更改之前,我想验证对于网格中的少数条目,用户尚未将“优先级”字段的值设置为相同的值。也就是说,如果他们将网格中五行的优先级列设置为 [1,2,3,3,5],我想发出警报,提醒他们优先级列需要唯一的值。

以下是我的网格 xe:viewItemFileService 代码:

<xe:restService id="restService1" jsId="restServiceObj"
        pathInfo="pathinfo">
        <xe:this.service>
            <xe:viewItemFileService defaultColumns="true"
                contentType="application/json" viewName="DocsByUsername"
                var="rsEntry" sortColumn="Priority"
                keys="#{sessionScope.username}">
            </xe:viewItemFileService>
        </xe:this.service>
    </xe:restService>  

以下是我的 Dojo DataGrid 的标记,其中包含可编辑的优先级列:

    <xe:djxDataGrid id="djxDataGrid1" singleClickEdit="true"
        jsId="gridObj" storeComponentId="restService1" rowSelector="20px">
        <xe:djxDataGridColumn id="djxDataGridColumn1" field="UserName"
            label="UserName" width="100px">
        </xe:djxDataGridColumn>
        <xe:djxDataGridColumn id="djxDataGridColumn2" field="Field1"
            label="Field1" width="100px">
        </xe:djxDataGridColumn>
        <xe:djxDataGridColumn id="djxDataGridColumn3" field="FieldN"
            label="FieldN" width="100px" editable="true">
        </xe:djxDataGridColumn>
        <xe:djxDataGridColumn id="djxDataGridColumn4"
            field="Priority" label="Priority" width="100px" editable="true"
            cellType="dojox.grid.cells.Select">
            <xe:this.options><![CDATA[#{javascript:var choices = ["1","2","3","4","5"];
                                 return choices;}]]></xe:this.options>
        </xe:djxDataGridColumn>
    </xe:djxDataGrid>

当用户按下“保存”按钮时,我调用以下priorityArray()函数....

<xp:scriptBlock id="scriptBlock3">
<xp:this.value><![CDATA[
function priorityArray(){
var rsStore = restServiceObj;
var grid = gridObj;

var rows = 0 ;
var priorities = [];
var item;
var unid;
var priority;

    var actualRows = restServiceObj['_items'].length;

    for(var i = 0 ; i < actualRows ; i++){
      item  = grid.getItem(i);
      if(item != null){
        unid = item["@unid"];
        priority = item["Priority"];
        priorities.push(item["Priority"]);
        rows = i;
     }
    };

   return priorities;

   };]]></xp:this.value>
</xp:scriptBlock>

我的问题出在 for 循环中。正在为网格中的耳行返回项目对象,但我的项目[“fieldName”]调用没有返回任何内容。我过去曾在 onRowClick 事件中使用过此表示法,在该事件中我为arguments[0] 对象传入 rowIndex,但它在 for 循环的脚本 block 中不起作用以返回所有条目。

顺便说一句,我不喜欢这种循环方法,因此如果有一种更简单的方法可以从 gridObj 或 RestServiceObj 返回所有当前内存中字段/列值,我洗耳恭听。

最佳答案

DataGrid 行项目的值存储在项目内的对象attributes 中。

enter image description here

将代码更改为

    unid = item.attributes["@unid"];
    priority = item.attributes["Priority"];
    priorities.push(priority);

关于xpages - 如何返回 XPage 上 Dojo DataGrid 中可编辑列的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29175990/

相关文章:

javascript - dojox.grid.DataGrid 自定义单元格?

DataGrid 的 Dojo 滚动问题

java - 在Java中读取sessionScope变量?

javascript - Dojo Datagrid 总是显示过时的数据

javascript - dojo 网格在 div 内不起作用

javascript - 在DOJO中隐藏数据网格的列

java - 有人可以为我提供一些有关 Java 中 OpenLog 的指导吗?

XPage 集群和状态变量

javascript - 如何使用 get() 获取嵌套的 Scope 属性

xpages - 回车默认值为a xp :inputTextarea