You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pug混入中特定参数无法传入代码块的问题求助

问题分析

Pug 中混入(mixin)的 block 代码块默认绑定的是该混入自身的作用域,而非调用混入时的外部作用域。你在 pf_img 混入里调用 a_ref 时,a_ref 的 block 无法直接访问 pf_img 内部的 name、source 等变量,因此出现了 name 变为 undefined 的情况。

解决方案

以下两种方案可以解决这个问题:

方案1:给 block 传递上下文参数

修改 a_ref 混入,让它接收额外的上下文参数,并在执行 block 时传递这些参数:

mixin a_ref(ref, ctx)
  if ref 
    a(ref=ref)
      block(ctx)
  else 
    block(ctx)

在 pf_img 中调用 a_ref 时,把需要的变量打包成对象传递,在 block 里通过默认参数名 it 访问:

mixin pf_img({name, source, ref, width="1/2", aspect_ratio="1/1", description, is_video=false} = {})
  span=name+source+aspect_ratio
  br
  +a_ref(ref, {name, source, aspect_ratio})
    span=it.name+it.source+it.aspect_ratio

也可以在 block 里显式命名参数,比如把 block(ctx) 改为 block(myCtx),然后用 myCtx.name 访问变量。

方案2:使用 with 切换作用域

不需要修改 a_ref 混入,直接在调用 a_ref 的 block 中用 with 关键字注入当前作用域的变量:

mixin pf_img({name, source, ref, width="1/2", aspect_ratio="1/1", description, is_video=false} = {})
  span=name+source+aspect_ratio
  br
  +a_ref(ref)
    with {name, source, aspect_ratio}
      span=name+source+aspect_ratio

with 会创建一个包含指定变量的临时作用域,让 block 内的代码可以直接访问这些变量。

验证结果

使用上述任意一种方案后,生成的 HTML 会与预期一致:

<span>2018 project/images/unsplash1.jpegaspect-[1/1]</span>
<br>
<a ref="xxx">
    <span>2018 project/images/unsplash1.jpegaspect-[1/1]</span>
</a>

内容的提问来源于stack exchange,提问作者Jerome Stephan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:10:51