【问题标题】:Store jquery template data in each rendered dom node在每个渲染的 dom 节点中存储 jquery 模板数据
【发布时间】:2015-11-10 11:16:38
【问题描述】:

我正在从服务器检索列表 json 数据,该数据使用 jquery 模板呈现到行表中。例如:

<script id="entry_tmpl" type="text/x-jquery-tmpl">
    <tr class="row_data" name="${id}>
        <td class="col_name">${name}</td>
        <td class="col_number">${number}</td>
    </tr>
</script>

我以标准方式渲染它:

$("#entry_tmpl").tmpl(entries).appendTo(someNode);

到目前为止没有什么特别的。现在请注意,除了“名称”和“编号”之外,我在数据对象中还有一些额外的数据,它们不是由模板呈现的。我希望以后能够在 javascript 中访问这些属性。所以我想找到一种方法来保存每个渲染的笔记的原始数据。所以以后我可以做这样的事情:

var elmentObj = $("#row_data[name='5']").prop('obj_data');
var other_data = elementObj['other_data'];

实现这样的目标的最佳方法是什么?我在网上四处搜索,但无法找到符合我要求的解决方案。

【问题讨论】:

  • 这似乎是您的问题中的一个循环,您可以在将其呈现为变量时捕获它,并将其保存以备后用,但看起来您正在尝试,但来自一个已经填充的表,即捕获后。那么什么给了?您可能会在很久以后提到,即浏览器存储? developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API
  • 对不起,也许我没有解释清楚。我已经将整个数据存储在变量“条目”中,该变量显示在我的代码中,但是,这与 dom 节点是分开的。我在其他地方有直接与渲染节点一起操作的javascript代码,我发现必须循环通过我原来的“条目”变量来定位所需的对象是不方便的。如果我能够将每个元素数据存储在 dom 中,我的其他代码可以简单地快速获取对象,因为我当前的代码已经引用了 dom 节点。这种方式更方便。
  • 似乎在我渲染节点之后,我应该再次通过我的“条目”变量循环并使用 jquery 的 .data() 方法将数据绑定到渲染节点。但是,我的问题是,是否有更有效的方法可以做到这一点,也许在 tmpl() 渲染期间,因为它已经在循环遍历每个元素。

标签: jquery templates binding


【解决方案1】:

所以在我使用 jquery .data() 填充表格后,我最终只是在循环中自己设置数据:

for (var i=0; i<entries.length; ++i) {
    var  e = entries[i];
    $(_.str.sprintf("#entry_tmpl .row_data[name='%s']", e.id)).data('tmpl_data', e);
}

这并不理想,因为我一直在寻找一种在模板渲染期间实现此目的的方法,因此我不必进行额外的循环,但这可以完成工作。

【讨论】:

    猜你喜欢
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多