在Yii2中呈现InputWidget时,id
选项会根据内部静态窗口小部件实例计数器自动生成HTML标记。默认情况下,id
看起来像w0
,w1
,w2
,...取决于实例化的窗口小部件数量。这在立即渲染整个页面时效果很好。
但是在引入部分渲染(例如AJAX)时很快就会出现问题,因为每个顺序页面渲染都将从0
的小部件计数器开始,所以如果我们将这些小部件注入已经渲染的页面,我们最终会出现id冲突(例如,我们可能有两个具有相同ID w0
的小部件)。这打破了HTML标准,导致JavaScript问题和其他麻烦。
那么有什么可能呢?
id
设置为硬编码字符串。但现在我们需要知道窗口小部件的呈现次数,我们需要添加大量if
语句来确定要呈现的ID。它有效,但它非常hacky。id
自动添加或附加窗口小部件id
。这在理论上听起来不错,但到目前为止我还没有意识到这一点。InputWidget
以使用UUID(通用唯一标识符)而不是计数器。这听起来很有希望,但它需要一个核心框架补丁(否则它不适用于第三方小部件)并且无法预测ID(例如在测试时)。对此最常用的通用解决方案是什么?