如何 return XPage 上的 Dojo DataGrid 中可编辑列的值?
How to return values of an editable column in a Dojo DataGrid on an XPage?
我在 Dojo DataGrid 中有一个可编辑的优先级列。在保存用户的更改之前,我想验证对于网格中的少数条目,用户没有将 Priority 字段的值设置为相同的值。也就是说,如果他们将网格中五行的优先级列设置为 [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>
当用户按下保存按钮时,我调用以下 priorirityArray() 函数....
<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 循环中。正在为网格中的耳朵行 return 编辑 item 对象,但我的 item["fieldName"] 调用什么都没有 return。我过去在 onRowClick 事件中使用过这种表示法,在该事件中我为 arguments[0] 对象传递了 rowIndex,但它在我的 for 循环中的脚本块中不起作用 return 所有条目。
顺便说一句,我不喜欢这种循环方法,所以如果有更简单的方法 return 来自 gridObj 或 restServiceObj 的所有当前内存中 field/column 值,我就是耳朵.
DataGrid 行项目的值存储在项目内的对象 attributes
中。
将代码更改为
unid = item.attributes["@unid"];
priority = item.attributes["Priority"];
priorities.push(priority);
我在 Dojo DataGrid 中有一个可编辑的优先级列。在保存用户的更改之前,我想验证对于网格中的少数条目,用户没有将 Priority 字段的值设置为相同的值。也就是说,如果他们将网格中五行的优先级列设置为 [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>
当用户按下保存按钮时,我调用以下 priorirityArray() 函数....
<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 循环中。正在为网格中的耳朵行 return 编辑 item 对象,但我的 item["fieldName"] 调用什么都没有 return。我过去在 onRowClick 事件中使用过这种表示法,在该事件中我为 arguments[0] 对象传递了 rowIndex,但它在我的 for 循环中的脚本块中不起作用 return 所有条目。
顺便说一句,我不喜欢这种循环方法,所以如果有更简单的方法 return 来自 gridObj 或 restServiceObj 的所有当前内存中 field/column 值,我就是耳朵.
DataGrid 行项目的值存储在项目内的对象 attributes
中。
将代码更改为
unid = item.attributes["@unid"];
priority = item.attributes["Priority"];
priorities.push(priority);