4

想象一下,您的应用程序中有几个组件,每个组件都有自己的视图。

虽然组件是独立的,但它们的视图可能对 DOM 元素使用相同的标识符,例如,有可能 2 个或更多组件具有具有类似输入控制的视图,例如:

<label for="Bid">Bid</label>
<input type="text" id="Bid" name="Bid" value="0"/>

组件激活后,它们的视图通过 附加到 DOM 上Boiler.ViewTemplate,现在Bid元素名称冲突,导致副作用,例如label仅在 1 个视图中单击作品,而在其他视图中被禁用。

避免此类冲突的最佳做法是什么?我应该为视图中的所有元素使用“唯一”后缀/前缀,例如id="ComponentName_Bid"?还是有更优雅的解决方案?

4

2 回答 2

0

这确实是一个非常好的问题。我也为此挣扎了很多次。有时我做了一个为每个 ViewTemplate 实例提供自动生成的唯一 ID 的实现。

  • 通过从 ViewTemplate 实例传递它,可以从 JS 逻辑(viewmodel.js 等)使用此 UID。
  • 这可以被 view.html 以及组件特定的 .css 文件用作标签 {comp.uid} ,它将被特殊的 ViewTemplate 逻辑替换,就像用于“nls”替换一样(参见视图中的第 105 行) -模板.js)。

这当然行得通,但是开发人员无法理解其复杂性。因此,在更高版本的 BoilerplateJS 中,我删除了此功能,并让开发人员按照您上面的建议手动管理 elementID。

我仍然不知道什么是最好的方法。但目前我相信手动管理它会产生更清晰的代码。

于 2012-12-29T05:25:48.367 回答
0

另一种选择是像这样简单地放在input里面label

<label>
   Last Name
   <input type="text" name="lastname" />
</label>
于 2013-11-25T14:42:00.927 回答