使用knockout.js设置表行id属性

时间:2016-06-13 20:44:32

标签: javascript jquery knockout.js

我需要在加载数据时让我的行使用标识row_##,但我无法找到如何将其关闭。

我用于HTML的代码是:

<tbody data-bind="foreach: deliveryItems">
  <tr data-bind="attr: {id: \'row_\' + id }">

基本上我希望每个表格行的ID都为row_##,而##会被JSON响应中的“id”值替换。

我用完整的示例代码制作了一个JS小提琴:https://jsfiddle.net/spyke01/kzcr5Lph/

3 个答案:

答案 0 :(得分:2)

你的结束 - 这在下面工作。

<tbody data-bind="foreach: deliveryItems">
  <tr data-bind="attr: {id: 'row_' + id }">

答案 1 :(得分:0)

我觉得你对试图摆脱困境感到困惑......

在HTML文档中创建data-bind属性时,属性值必须用单引号或双引号括起来。

<div data-bind=""></div>

现在,引号之间的所有内容都将通过敲除提取并评估,好像它是javascript的片段。所以你可以做你习惯的所有事情。现在,如果你想输入一个字符串,那就有一个问题:如果使用相同的引用类型,你的HTML解析器会认为你已经结束了属性值引号。 E.g:

<div data-bind="text:"hello""></div>

将创建一个<div>,其data-bind="text:"属性值组合和hello属性没有值。

您无法转义这些引号,因为HTML不适用于\转义字符。例如:

<input type="text" placeholder="hello \"world\"">

只会给你一个占位符hello \。如果你想在属性和 中放置双引号属性的值,你必须使用&quot;

<input type="text" placeholder="hello &quot;world&quot;">

现在,幸运的是,有两种类型的引用 HTML和JS规范允许。这意味着如果您打算在其中使用双引号,则可以在属性值周围使用单引号,反之亦然。

这使我们得到了解决方案,正如其他回答者已经给出的那样:

<tbody data-bind="foreach: deliveryItems">
  <tr data-bind="attr: {id: 'row_' + id }">
</tbody>

现在,只有当你想在你的id字符串中使用<{1}}字符 时,你才必须使用'。 E.g:

\'

会给你:

attr: { id: 'row\'_' + 12 }

答案 2 :(得分:-1)

我能够弄清楚这一点。我不得不用这个:

<tbody data-bind="foreach: deliveryItems">
  <tr data-bind="attr: {id: \'row_\' + $data.id }">