Handlebars each循环中无法渲染外部result对象属性的技术问题
问题分析与解决方案
你遇到的核心问题是Handlebars循环时的上下文切换导致无法访问外部result对象:当进入{{#each sem}}循环块后,模板的上下文会自动切换为当前迭代的sem对象(也就是每个包含semNumber和collegeName的项),此时直接写{{result.href}}会在当前sem对象里查找result属性,自然找不到对应值。
下面给你两种可靠的解决方法,同时满足URL中嵌入semNumber的需求:
方法1:使用../访问父级上下文
../在Handlebars中代表「上一级上下文」,在each循环里用它就能拿到根级的result对象:
{{#each sem}} <div>{{semNumber}}</div> <div>{{collegeName}}</div> <!-- 用../访问根级的result,同时嵌入当前sem的semNumber到URL --> <a href="/marks/edit_marks/semester_number={{semNumber}}/{{../id}}">{{../result.content}}</a> {{/each}}
注:这里假设
id是根级上下文的属性,如果id是当前sem对象自带的属性,直接写{{id}}即可。
方法2:使用@root直接访问根级上下文
如果模板嵌套较深,../可能会因为层级关系变得混乱,用@root可以明确指向最顶层的上下文,写法更清晰:
{{#each sem}} <div>{{semNumber}}</div> <div>{{collegeName}}</div> <!-- 用@root直接指定根级的result和id --> <a href="/marks/edit_marks/semester_number={{semNumber}}/{{@root.id}}">{{@root.result.content}}</a> {{/each}}
预期渲染效果
两种写法最终都会输出你想要的结果(假设id值为123):
<div>2</div> <div>blalblalbla</div> <a href="/marks/edit_marks/semester_number=2/123">Some text</a> <div>3</div> <div>dfhgfh</div> <a href="/marks/edit_marks/semester_number=3/123">Some text</a> <div>4</div> <div>dsfdsdsf</div> <a href="/marks/edit_marks/semester_number=4/123">Some text</a>
内容的提问来源于stack exchange,提问作者Dargahwala Idrees
相关产品推荐
相关产品推荐

