如何在嵌套数组内层上下文同时访问外层与内层索引?
如何在内层模板上下文访问外层数组的索引
当然可以!在大多数支持上下文管理的模板引擎(比如Handlebars、Mustache等)中,你完全能在内层循环里获取外层数组的索引,核心思路是在外层遍历的时候显式捕获并保存外层索引变量,让内层上下文可以直接引用它。
具体实现方案
方案1:显式声明外层索引变量(推荐,兼容性更强)
以类似你给出的模板语法为例,我们可以在遍历外层数组时,同时声明外层的索引变量,这样内层循环就能直接使用这个变量:
{#each outer as |outerItem outerIdx|} {#each outerItem.inner as |innerItem innerIdx|} outer[{{outerIdx}}].inner[{{innerIdx}}] {/each} {/each}
这里的outerIdx就是外层数组的索引,它会被保留在当前的上下文栈中,内层循环可以直接访问到它,最终就能生成你想要的outer[0].inner[0] outer[0].inner[1] outer[1].inner[0] outer[1].inner[1]格式输出。
方案2:通过父级上下文访问索引(依赖引擎特性)
有些模板引擎支持通过特殊语法访问父级上下文的变量,比如用../来指代上一级上下文。如果你的模板引擎支持这种写法,也可以这样写:
{#each outer} {#each inner} outer[{{../$idx}}].inner[{{$idx}}] {/each} {/each}
这里的../$idx就代表父级(外层循环)的索引,$idx是当前内层循环的索引。不过要注意,这种语法在不同模板引擎里可能有差异(比如有的引擎用@parent.$idx),所以显式声明变量的方式更稳妥。
关键原理
模板引擎的上下文是分层的,当你进入内层循环时,父级的上下文并不会消失,只要你在外层把索引存储到一个命名变量里,或者引擎提供了父级上下文的访问方式,内层就能拿到外层的索引值。
内容的提问来源于stack exchange,提问作者RaDangelo
相关产品推荐
相关产品推荐

