【问题标题】:Best practice for generating html ids with grails使用 grails 生成 html id 的最佳实践
【发布时间】:2015-02-05 11:07:51
【问题描述】:

我有一个可以在同一个视图中多次呈现的模板。

模板包含一个表单,我有一些使用 html id 附加到表单元素的 jquery 事件侦听器。

现在我使用“g:set”在模板顶部创建一个 elementId 变量,使用当前时间(以毫秒为单位)并将其附加到表单上的每个元素。这样,无论同一个模板被渲染多少次,每个表单元素都会在页面中拥有一个唯一的 id。

我的方法有效,但在我看来,必须有更好的方法来实现我想做的事情?

这是我的方法的一个例子:

<g:set var="elementId" value="${'elementId-' + new Date().getTime()}" />

<form>
<g:textField id="${elementId}name" name="name"/>
<g:textField id="${elementId}address" name="address"/>
</form>

<script>
$("#${elementId}name").on("click", myFunction())
$("#${elementId}address").on("click", myFunction())
</script>

【问题讨论】:

  • 除了我的回答之外,还要检查您的 javascript 绑定,您正在绑定的 "click" 事件缺少右双引号。
  • 抱歉..我目前无权访问我的项目。那里的语法很好,所以它只是我的问题中的一个错误。我的方法很有效,我只是觉得应该有更好的方法来生成 id。也许没有?
  • 误读了这个问题,我的错。这种方法有哪些顾虑?对我来说它看起来不错。
  • 使用时间作为 id 生成器对我来说感觉很奇怪。我想模板在同一时间被渲染的可能性很小。
  • Travis,如果您真的对此感到担心,请在模板顶部生成的 ID 或 GUID 或 UUID 中添加一个随机数。

标签: javascript jquery html grails gsp


【解决方案1】:

虽然这样做可能会让人觉得有点“奇怪”或“奇怪”,但您的方法将实现您所追求的。添加您在 GSP 级别生成的随机数或 UUID 也将有助于避免冲突(尽管这可能是矫枉过正)。

Grails 不会以这种方式提供任何帮助。由于这是浏览器中如何处理元素的问题,因此 DOM 和 Grails 通常会解决服务器端问题。

另一种方法是重构您的代码,使其不依赖元素 ID,而是使用更通用的基于分类的代码。使用类名将是一个好方法。根据您的要求,这可能会或可能不会很好地工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多