3

在 Yii2中渲染InputWidgetid时,会根据内部静态小部件实例计数器自动生成选项 HTML 标签。默认情况下,ids 看起来像w0, w1, w2, ... 取决于实例化了多少小部件。这在一次渲染整个页面时效果很好。

但是在引入部分渲染(例如 AJAX)时很快就会出现问题,因为每个顺序页面渲染都会从小部件计数器开始0,所以如果我们将这样的小部件注入到已经渲染的页面中,我们最终会出现 id 冲突(例如. 我们可能有两个具有相同 id 的小部件w0)。这违反了 HTML 标准,导致 JavaScript 问题和其他令人头疼的问题。

那么围绕这个有哪些可能性呢?

  • 最明显的解决方法当然是手动将 设置id为硬编码字符串。但是现在我们需要知道widget会被渲染多少次,我们需要添加很多if语句来确定渲染哪个ID。它有效,但它非常hacky。
  • id使用id其父容器的 自动前置或附加小部件。这在理论上听起来不错,但到目前为止我还没有意识到这一点。
  • 修改 Yii2InputWidget以使用 UUID(通用唯一标识符)而不是计数器。这听起来很有希望,但它需要一个核心框架补丁(否则它不适用于第 3 方小部件)并且无法预测 id(例如,在测试时)。

对此最通用的解决方案是什么?

4

0 回答 0