使用Power Pages客户端 API 列表访问和自定义传统和新式列表。 本参考说明如何使用行、列、单元格、可见性和列表事件。
$pages.currentPage.lists
列表集合提供用于处理页面上的传统和新式列表元素的方法。
$pages.currentPage.lists 方法
使用这些方法枚举页面上的所有列表,并通过其 HTML 元素 ID 获取特定列表。
| 方法 | Returns | 说明 |
|---|---|---|
getAll |
IList[] |
返回当前页上的所有列表。 |
getListById(id: string) |
IList | 按其 HTML 元素 ID 获取列表。 |
$pages.currentPage.lists 示例
这些示例演示如何枚举页面上的所有列表,并通过其 HTML 元素 ID 获取特定列表。
Microsoft.PowerPages.onPagesClientApiReady(async function ($pages) {
let lists = $pages.currentPage.lists.getAll();
let list = $pages.currentPage.lists.getListById('list_#1');
});
IList 接口
列表表示表格或类似网格的数据组件。
IList 属性
这些属性标识列表并指示它是否使用新式呈现模型。
| Property | 类型 | 说明 |
|---|---|---|
id |
字符串 | 列表的唯一标识符。 |
isModern |
布尔值 | 对于新式列表,为 true 的布尔值,否则为 false。 |
rows |
IRow[] |
列表当前发布的行。 每次读取此属性时,它都会返回最新的数据,因此请在事件处理程序中 loaded 读取它,以确保数据可用。 |
columns |
IColumn[] |
列表的当前视图中的列。 |
Note
属性rowscolumns、offgetColumnon属性、方法和返回的所有内容仅在新式列表中受支持,其中isModern为 true。 在传统的列表中,它们可以安全地调用,但不执行任何操作:rows返回columns空数组、getColumn返回未定义且onoff不执行任何操作。 在访问列表数据之前检查 isModern 或使用 loaded 从未针对传统列表发生的事件。
IList 方法
使用这些方法来检查列表可见性、切换是否可见、访问基础 HTML 元素以及处理列和事件。
| 方法 | Returns | 说明 |
|---|---|---|
getVisible |
boolean |
如果列表可见,则返回 true。 |
setVisible(isVisible: boolean) |
void |
设置列表的可见性。 |
getHtmlElement |
HTMLElement |
返回列表的基础 HTML 元素。 |
getColumn(logicalName: string) |
IColumn | undefined |
返回具有指定逻辑(架构)名称的列。 如果未匹配列,则返回未定义。 |
on(event: string, handler: function) |
void |
订阅列表事件的处理程序。 请参阅 列表事件。 多次向同一事件订阅同一个处理程序不起作用。 |
off(event: string, handler: function) |
void |
取消订阅注册到 on的处理程序。 传递传递给 on的同一函数引用。 不同的引用不会取消订阅处理程序。 |
IList 示例
以下示例按 ID 检索列表,记录其可见性状态,并在网格加载时读取其数据。
Microsoft.PowerPages.onPagesClientApiReady(async function ($pages) {
let list = $pages.currentPage.lists.getListById('list_#1');
console.log(`List id: ${list.id}`);
if (list.getVisible()) {
console.log('List is currently visible.');
}
// Modern list data is available only after the grid loads, so read it in a `loaded` handler.
if (list.isModern) {
list.on('loaded', () => {
console.log(`List has ${list.rows.length} rows and ${list.columns.length} columns.`);
});
}
});
IRow 接口
该 IRow 接口表示新式列表中的单个行。 从 list.rows 属性或 列表事件 有效负载获取行。
以返回网格发布的数据开头 get 的方法。 其他方法设置行的显示方式,例如其样式、类名和可见性。 网格在呈现行时应用这些设置。 隐藏行只会更改行的显示方式;基础数据不会更改。
IRow 方法
使用这些方法来读取行的数据并更改行的显示方式。
| 方法 | Returns | 说明 |
|---|---|---|
getId |
string |
以 GUID 字符串的形式返回行的 Dataverse 记录 ID。 |
getValue(logicalName: string) |
string | number | boolean | Date | null |
返回具有指定逻辑(架构)名称的列的原始字符串、数字、布尔值、有效日期或数值选项值。 当列不在行中或其原始值是不支持的复杂值(包括查找形状的对象)时返回 null。 当原始复杂值不可用时使用 getDisplayValue 。 |
getDisplayValue(logicalName: string) |
string |
返回为当前区域设置设置格式化的列的值。 当列不在行中时返回一个空字符串。 |
getPrivileges |
object | undefined |
返回服务器为记录计算的特权:canRead、、canWritecanDelete、canAppend和canAppendTo。 如果未提供服务器,则返回未定义。 使用这些值可更改数据显示方式,而不是强制实施安全性。 |
getState |
object | undefined |
返回 stateCode 记录的和 statusCode 值。 如果未提供服务器,则返回未定义。 |
setStyle(style: object) |
void |
将内联 CSS 样式合并到行中。 每个调用都会添加到已设置的样式。 |
setClassName(className: string) |
void |
将行的 CSS 类名替换为指定的空格分隔类名。 |
addClassName(className: string) |
void |
向行中添加一个或多个空格分隔的 CSS 类名称。 |
removeClassName(className: string) |
void |
从行中删除一个或多个空格分隔的 CSS 类名称。 |
setVisible(visible: boolean) |
void |
显示或隐藏行。 此方法仅更改行的显示方式。 |
getCell(logicalName: string) |
ICell | 返回一个句柄,用于更改行的单元格的显示方式。 |
IRow 示例
本示例突出显示已取消的记录并隐藏非活动记录。
Microsoft.PowerPages.onPagesClientApiReady(async function ($pages) {
const list = $pages.currentPage.lists.getListById('list_#1');
list.on('loaded', () => {
list.rows.forEach((row) => {
// Highlight canceled records where statuscode is 6.
if (row.getValue('statuscode') === 6) {
row.setStyle({ backgroundColor: '#fde7e9', color: '#a80000' });
}
// Hide inactive records where statecode is 1.
if (row.getValue('statecode') === 1) {
row.setVisible(false);
}
});
});
});
IColumn 接口
该 IColumn 接口表示新式列表中的单个列。 从 list.columns 属性或 list.getColumn 方法获取列。 可以单独设置标头、可见性和工具提示。
这些 get 方法返回源数据,而不是设置的值。 例如,getDisplayName即使在调用setHeader后也返回配置的显示名称,就像返回服务器即使在调用cell.setDisplayText后设置格式的值一样row.getDisplayValue。 此行为使代码可以安全地运行多次,因为 loaded 每次列表提取、排序、筛选器或页面数据时,处理程序都会再次运行。 例如, column.setHeader(column.getDisplayName() + ' *') 每次生成相同的结果,而不是添加另一个星号。 读取源值,然后派生设置的值。
IColumn 方法
使用这些方法可读取列的名称并更改列的显示方式。
| 方法 | Returns | 说明 |
|---|---|---|
getLogicalName |
string |
返回列的逻辑(架构)名称。 |
getDisplayName |
string |
返回列配置的显示名称。
setHeader 不会更改此值。 |
setHeader(header: string) |
void |
重写列标题中的文本。 |
setVisible(visible: boolean) |
void |
显示或隐藏整个列。 |
setTooltip(tooltip: string) |
void |
设置列标题的工具提示。 当有人将鼠标悬停在标题上时,工具提示将显示,屏幕阅读器将其用作标头的辅助名称。 |
IColumn 示例
本示例设置列的标题文本和工具提示。
Microsoft.PowerPages.onPagesClientApiReady(async function ($pages) {
const list = $pages.currentPage.lists.getListById('list_#1');
list.on('loaded', () => {
const column = list.getColumn('name');
if (column) {
column.setHeader('Account name');
column.setTooltip('The primary name of the account');
}
});
});
ICell 接口
该 ICell 接口表示单个单元格,该单元格是行和列的交集。 从 row.getCell 方法获取单元格。 单元格按设计仅写。 若要读取单元格的值,请使用getValue包含单元格的行的或getDisplayValue方法。
ICell 方法
使用这些方法来更改单元格的文本和样式。
| 方法 | Returns | 说明 |
|---|---|---|
setDisplayText(text: string) |
void |
替换单元格中显示的文本。 使用此方法可显示友好文本,而不是代码、屏蔽值或显示锁屏提醒。 |
setStyle(style: object) |
void |
将内联 CSS 样式合并到单元格中。 每个调用都会添加到已设置的样式。 |
ICell 示例
本示例更改每行中单元格的文本和样式。
Microsoft.PowerPages.onPagesClientApiReady(async function ($pages) {
const list = $pages.currentPage.lists.getListById('list_#1');
list.on('loaded', () => {
list.rows.forEach((row) => {
const cell = row.getCell('statuscode');
cell.setDisplayText('Active');
cell.setStyle({ fontWeight: 'bold', backgroundColor: '#fff4ce' });
});
});
});
列出事件
新式列表会引发使用 list.on 该方法订阅的事件,并使用该方法取消订阅 list.off 。 由于这些事件提供 行 对象,因此它们也是读取或设置行数据的样式的建议位置。 事件发生后 loaded ,数据可用。
| Event | 事件发生时 | 有效载荷 |
|---|---|---|
loaded |
列表提取并发布其行数据后。 每次列表刷新或页面数据时,都会再次发生此事件。 | { rows: IRow[] } |
rowclick |
有人选择一行。 | { row: IRow, event: MouseEvent } |
cellclick |
有人选择一个单元格。
cellclick注册处理程序时,rowclick该选择不会发生该事件。 |
{ row: IRow, columnName: string, event: MouseEvent } |
重要
如果同时注册了这两 rowclick 个处理程序和 cellclick 处理程序,则选择一个单元格仅 cellclick 调用处理程序。
rowclick不会为同一选择调用处理程序。
列表事件示例
此示例订阅 rowclick 和 cellclick 事件。
Microsoft.PowerPages.onPagesClientApiReady(async function ($pages) {
const list = $pages.currentPage.lists.getListById('list_#1');
const onRowClick = (e) => {
console.log('Selected row:', e.row.getId());
e.row.setStyle({ outline: '2px solid #0078d4' });
};
list.on('rowclick', onRowClick);
list.on('cellclick', (e) => {
console.log('Selected cell:', e.row.getId(), 'column:', e.columnName);
e.row.getCell(e.columnName).setStyle({ backgroundColor: '#e5f1fb' });
});
// Define a cleanup function, and call it when your code no longer needs
// the events. Pass the same handler reference that you passed to the on method.
const stopListening = () => {
list.off('rowclick', onRowClick);
};
});
若要取消订阅,请将相同的函数引用 off 传递给传递给 on 该方法的方法。 不同的引用不会取消订阅处理程序。