fast-element RepeatDirective.createPlaceholder 属性详解:模板指令占位符的生成机制
前端UI组件【免费下载链接】fastThe adaptive interface system for modern web experiences.项目地址https://gitcode.com/gh_mirrors/fa/fast点击查看免费下载RepeatDirective 是microsoft/fast-element模板引擎中负责列表数组渲染的核心指令类而createPlaceholder是该类上用于生成占位符字符串的属性它决定了指令在模板编译阶段如何占位为后续行为绑定behavior与应用 DOM 变更做准备。本文以该 API 文档为骨架结合仓库内RepeatDirective的源码实现讲解这一属性的签名、作用、在模板编译流程中的位置以及它与repeat()工厂函数、createBehavior()方法的协作关系帮助读者理解 fast-element 列表渲染的底层机制。一、createPlaceholder 属性是什么在 RepeatDirective 类文档 中RepeatDirective被定义为一个配置列表渲染的指令A directive that configures list rendering其类签名为export declare class RepeatDirectiveTSource any extends HTMLDirectivecreatePlaceholder是RepeatDirective的一个属性property其完整签名如下createPlaceholder: (index: number) string;文档给出的描述为Creates a placeholder string based on the directives index within the template. 基于指令在模板中的索引创建一个占位符字符串。也就是说它是一个函数类型的属性接收一个index参数指令在模板中的索引号返回一个字符串作为该指令在模板中的占位符占位符的内容与指令在模板编译序列中的位置直接相关索引不同生成的占位符也不同从而保证每个指令在模板字符串中有唯一标记。属性的归属继承自 HTMLDirective在 HTMLDirective 类文档 中可以看到createPlaceholder(index: number): string是抽象基类HTMLDirective的抽象方法export declare abstract class HTMLDirective implements NodeBehaviorFactory在 HTMLDirective.createPlaceholder 方法文档 中明确了它的参数含义参数类型描述indexnumber指令在模板中的索引The index of the directive within the template返回值类型为string。因此RepeatDirective.createPlaceholder是对基类抽象方法的具体实现在 1.x API 文档中以属性形式呈现类型为箭头函数(index: number) string它由模板编译器在编译阶段调用用于在模板字符串中安插指令标记。同一机制还出现在HTMLDirective的其它子类上例如 TargetedHTMLDirective.createPlaceholder 与 AttachedBehaviorHTMLDirective.createPlaceholder 等它们共同构成了指令 → 占位符 → 行为工厂 → 运行时行为的完整链路。二、createPlaceholder 在模板编译流程中的角色fast-element 的模板采用编译式设计模板字符串在编译阶段被扫描、解析其中的每个指令都会被替换为占位符编译产物是一段可执行的渲染代码。createPlaceholder正是这一环节的接缝扫描指令编译器遍历模板遇到HTMLDirective时记录其索引生成占位符调用createPlaceholder(index)得到唯一标记字符串插入模板字符串相应位置收集行为工厂占位符对应位置记录下的指令本身会被收集为行为工厂behavior factory供运行时创建行为实例化行为模板实例化后调用指令的createBehavior(target)创建具体行为对象如列表渲染中的RepeatBehavior。从 RepeatDirective.createBehavior 方法文档 可见createBehavior(target: Node): RepeatBehaviorTSource;返回类型为 RepeatBehavior。占位符负责编译期定位createBehavior负责运行期动作两者一前一后共同完成列表渲染。三、从仓库源码看 RepeatDirective 的实际实现当前仓库中RepeatDirective的实现位于 packages/fast-element/src/templating/repeat.ts从源码结构看RepeatDirective同时实现了HTMLDirective、ViewBehaviorFactory与BindingDirective接口export class RepeatDirectiveTSource any implements HTMLDirective, ViewBehaviorFactory, BindingDirective { targetNodeId: string; public createHTML(add: AddViewBehaviorFactory): string { return Markup.comment(add(this)); } public constructor( public readonly dataBinding: BindingTSource, public readonly templateBinding: BindingTSource, SyntheticViewTemplate, public readonly options: RepeatOptions, ) { ArrayObserver.enable(); } public createBehavior(): RepeatBehaviorTSource { return new RepeatBehaviorTSource(this); } } HTMLDirective.define(RepeatDirective);值得说明的是占位符的实际形态在当前版本中RepeatDirective通过createHTML(add)将自身注册给add回调并以Markup.comment(...)生成一个HTML 注释节点作为模板中的占位标记。这与 1.x API 文档描述的createPlaceholder(index)机制同源——都是用字符串占位、以索引/注册顺序保证唯一性的编译策略只是不同版本的实现入口略有差异createHTML与createPlaceholder分别对应不同代际的模板编译管线。构造函数接收三个参数——数据绑定dataBinding、模板绑定templateBinding和渲染选项options构造时即调用ArrayObserver.enable()启用数组观察能力这是列表增量更新如recycle、positioning能够工作的前提。RepeatOptions的完整字段可参考 RepeatOptions 文档 与 positioning 选项、recycle 选项。定义注册文件末尾的HTMLDirective.define(RepeatDirective)将指令注册到类型注册表使模板编译器能够识别并处理该指令。四、配合 repeat() 工厂函数的使用方式RepeatDirective通常不直接通过new实例化而是使用repeat()工厂函数创建。同样位于 repeat.ts 中export function repeat TSource any, TArray extends ReadonlyArrayany ReadonlyArrayany, TParent any, ( items: | ExpressionTSource, TArray, TParent | BindingTSource, TArray, TParent | ReadonlyArrayany, template: | ExpressionTSource, ViewTemplateany, TSource | BindingTSource, ViewTemplateany, TSource | ViewTemplateany, TSource, options: RepeatOptions defaultRepeatOptions, ): CaptureTypeTSource, TParent { const dataBinding normalizeBinding(items); const templateBinding normalizeBinding(template); return new RepeatDirective(dataBinding, templateBinding, { ...defaultRepeatOptions, ...options, }) as any; }三个参数说明如下参数类型说明items表达式 / Binding / 数组要渲染的数据源可以是数组字面量、绑定或返回数组的表达式最终经normalizeBinding归一化为Bindingtemplate表达式 / Binding / ViewTemplate每个列表项使用的模板同样支持静态模板或按项动态解析的模板绑定optionsRepeatOptions可选渲染选项与defaultRepeatOptions合并可开启recycle复用已卸载视图、positioning支持 DOM 位置跟踪等特性典型用法在 fast-element 模板中import { html, repeat } from microsoft/fast-element; const template html ul ${repeat( x x.items, // 数据绑定返回数组 htmlli${x x.name}/li, // 每项的模板 { positioning: true }, // 可选启用位置跟踪 )} /ul ;在编译时上述repeat()调用返回的RepeatDirective实例会在模板中留下唯一占位标记即createPlaceholder机制的作用点运行时则由createBehavior()生成的RepeatBehavior接管数组的渲染、更新与回收。五、相关 API 一览与阅读指引围绕RepeatDirective.createPlaceholder建议按以下顺序深入阅读仓库中的 API 文档与源码RepeatDirective 类总览类签名、构造函数、属性与方法总表RepeatDirective 构造函数itemsBinding、templateBinding、options三参构造RepeatDirective.createBehavior创建RepeatBehavior的方法HTMLDirective 基类 与 createPlaceholder 抽象方法占位符机制的基类定义RepeatOptions列表渲染的可选配置项源码repeat.tsRepeatDirective与repeat()实现、html-directive.tsHTMLDirective、ViewBehaviorFactory等接口定义六、小结RepeatDirective.createPlaceholder虽然只是一个返回字符串的小属性但它是 fast-element 模板编译指令占位机制的关键一环它按指令在模板中的索引生成唯一标记使编译器能够把指令可靠地嵌入模板字符串并在运行时通过createBehavior()精确地应用行为。理解它也就理解了 fast-element 从模板字符串到可复用视图行为的编译与实例化链路。若需在实际项目中使用列表渲染直接通过repeat()工厂函数配合html模板即可获得完整的占位、绑定与更新能力。赞分享前端UI组件【免费下载链接】fastThe adaptive interface system for modern web experiences.项目地址https://gitcode.com/gh_mirrors/fa/fast点击查看免费下载相关推荐microsoft/fast-element 模板编译占位符机制AttachedBehaviorHTMLDirective.createPlaceholder() 深度解析microsoft/fast element 模板编译占位符机制AttachedBehaviorHTMLDirective.createPlaceholde前端UI组件深入解析 microsoft/fast-element 的 HTMLDirective.createPlaceholder()模板编译占位符机制深入解析 microsoft/fast element 的 HTMLDirective.createPlaceholder 模板编译占位符机制 导读 本文围前端UI组件FAST microsoft/fast-element Controller.template 属性详解组件模板的读取、设置与渲染时机FAST microsoft/fast element Controller.template 属性详解组件模板的读取、设置与渲染时机 Controller前端UI组件上一篇electron-builder migrate-schema 的 nsis-web 升级提示如何应对 v27 默认禁用的 Web Installer 自动更新下一篇5分钟掌握COLA架构构建整洁分层企业应用的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

从设立海外子公司到一周合规用工:名义雇主(EOR)经历了什么

从设立海外子公司到一周合规用工:名义雇主(EOR)经历了什么

一切要从「怎么在别国合法雇人」说起企业跨境经营时,最先撞上的往往不是市场,而是一个基础问题:如何在一个自己没有法律实体的国家,合法地雇佣一名当地员工。名义雇主(Employer of Record,简称 EOR&#xf…

2026/9/30 8:24:43 阅读更多 →
临界电流密度(CCD)— 固态电池快充能力的天花板指标

临界电流密度(CCD)— 固态电池快充能力的天花板指标

TL;DR:临界电流密度(CCD)是固态电池在不发生锂枝晶短路的前提下能承受的最大电流密度,直接决定了快充能力的上限。2025–2026年的多项研究表明,通过电解质致密化、晶界工程、界面粘附设计和自修复机制等策略&#xff0…

2026/9/30 8:23:56 阅读更多 →
IEEE 802.1Qcc-2018精读:TSN从能通到可管理的关键一跃

IEEE 802.1Qcc-2018精读:TSN从能通到可管理的关键一跃

简介:IEEE 802.1Qcc-2018 是时间敏感网络(TSN)协议族的关键标准修订,由 IEEE 计算机学会赞助发布,在 IEEE Std 802.1Q-2018 基础上提出第三十一号修正案,重点增强流预留协议(SRP)与性…

2026/9/30 8:23:49 阅读更多 →

最新新闻

tar解压失败排查与修复:从gzip报错到完整复原

tar解压失败排查与修复:从gzip报错到完整复原

最近排查一个线上问题时,连着在三台服务器上撞见了同一种尴尬场面: tar -zxvf 刚解压到一半,终端里刷出一行 gzip: stdin: unexpected end of file ,紧接着就是 tar: Error is not recoverable: exiting now ,退…

2026/9/30 11:02:54 阅读更多 →
禅道二次开发整合Dify工作流:项目月报AI智能分析实战指南

禅道二次开发整合Dify工作流:项目月报AI智能分析实战指南

做了这么多年项目管理和研发管理工具,我早就习惯了禅道这个老伙计。它功能扎实、部署灵活、国内团队用得多,但真要让它把项目月报这种需要"人话总结"的事情做好,还是有些力不从心。所以当看到"禅道二次开发:项目月…

2026/9/30 11:02:54 阅读更多 →
Spring Boot用户数据管理实战:从CRUD到事务、缓存与安全配置

Spring Boot用户数据管理实战:从CRUD到事务、缓存与安全配置

上周帮朋友公司重构内部系统的用户管理模块,需求拆开其实不算复杂:部门树、人员列表、账号状态、登录日志,外加上一个管理后台。但业务上看着简单,真正动手之后你会发现,“用户数据管理”这五个字牵扯到的东西远不止增…

2026/9/30 11:02:54 阅读更多 →
本地化以图搜图工具实战:感知哈希+向量检索实现毫秒级图片查重

本地化以图搜图工具实战:感知哈希+向量检索实现毫秒级图片查重

几万张图片堆在硬盘里,有从网上下载的、有随手截图的、有改过尺寸的老版本,你明明记得自己存过这张图,却翻遍整个文件夹都找不到。这种体验我想做素材整理的人都懂。我一开始也想用现成工具,但试了一圈发现:要么必须把…

2026/9/30 11:02:54 阅读更多 →
有序链表合并详解:从原理到代码,吃透数据结构经典题

有序链表合并详解:从原理到代码,吃透数据结构经典题

题目是“习题2.5 两个有序链表序列的合并”,光看标题可能觉得不就是个链表合并嘛,有什么好讲的。但真正动手写过的人应该知道,这道题几乎是所有数据结构教材里链表章节的“标配”题目,也是很多人第一次感受到“指针操作原来这么容…

2026/9/30 11:02:54 阅读更多 →
AI科研工具赋能学术创新:助力科研效率提升与前沿研究突破的实用指南

AI科研工具赋能学术创新:助力科研效率提升与前沿研究突破的实用指南

作为研究生,文献海量、实验乱飞、论文卡壳、组会频繁……一天不高效就落后别人十条街! 今天我精选2026年最火的4款纯AI驱动科研神器,切问学术打头阵,从文献精准挖宝到写作一键起飞、总结自动化、数据提取零压力,全流程…

2026/9/30 11:01:51 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 8:16:59 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 16:41:41 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/29 8:24:48 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/29 3:55:56 阅读更多 →