我正在为 LOB 样式的 Aurelia 应用程序构建自定义数据网格框架,并且需要有关如何对主网格元素进行模板化的帮助,以便它可以从子列元素中获取自定义单元格模板进行渲染。
这是我到目前为止所做的:
网格示例.html
<data-grid items-source.bind="rowItems">
<data-column property-name="Name" t="[displayName]fields_Name">
<div class="flex -va-middle">
<div class="user-avatar avatar-square">
<img
if.bind="row.dataItem.avatarUri"
src.bind="row.dataItem.avatarUri" />
</div>
<span class="name">${row.dataItem.name}</span>
</div>
</data-column>
<data-column property-name="StatusText" t="[displayName]fields_Status">
<span class="label ${row.statusClass}">${row.dataItem.statusText}</span>
</data-column>
<data-column property-name="Location" t="[displayName]fields_Location">
<span>${row.dataItem.location}</span>
</data-column>
<data-column property-name="DateCreated" t="[displayName]fields_MemberSince">
<span tool-tip.bind="row.dataItem.dateCreated | dateToString:'long-date-time'">
${row.dataItem.dateCreated | dateToString:'short-date'}
</span>
</data-column>
</data-grid>
数据列.ts
import {
autoinject,
bindable,
noView,
processContent,
ViewCompiler,
ViewFactory } from "aurelia-framework";
import { DataGridCustomElement } from "./data-grid";
@autoinject
@noView
@processContent(false)
export class DataColumnCustomElement {
@bindable
propertyName: string;
@bindable
displayName: string;
cellTemplate: ViewFactory;
constructor(private readonly _element: Element,
private readonly _dataGrid: DataGridCustomElement,
private readonly _viewCompiler: ViewCompiler) {
this.cellTemplate = this._viewCompiler.compile(`<template>${this._element.innerHTML}</template>`);
this._dataGrid.columns.push(this);
}
}
数据-grid.html
<template>
<div class="table-wrapper -data-list -sticky-header">
<table class="hover unstriped">
<tbody>
<tr class="labels">
<th repeat.for="column of columns">
<span>${column.displayName}</span>
</th>
</tr>
<tr repeat.for="row of itemsSource">
<td repeat.for="column of columns">
<!-- inject view for column.cellTemplate here? -->
</td>
</tr>
</tbody>
</table>
</div>
</template>
数据网格.ts
import { autoinject, bindable } from "aurelia-framework";
import { DataColumnCustomElement } from "./data-column";
@autoinject
export class DataGridCustomElement {
@bindable
itemsSource: any[] = [];
columns: DataColumnCustomElement[] = [];
constructor(private readonly _element: Element) {
}
}
data-column
元素声明了一个单元格模板,该单元格模板被手动解析为一个实例ViewFactory
- 我坚持的是如何为模板中相应td
转发器中的每个数据列使用单元格模板data-grid
,所以它的行为就像我直接声明了模板内容在那里。
这可能与默认repeat.for
语法有关吗?还是我需要一个自定义模板控制器来执行此操作,它还可以接受 ViewFactory 实例作为范围内的可绑定参数?
如果有更好的方法来实现这一要求,那么我也对此持开放态度。