【问题标题】:Knockout binding is bloating html (table cells), how to create bindings with javascript or bind from parent element?淘汰赛绑定是膨胀的 html(表格单元格),如何使用 javascript 创建绑定或从父元素绑定?
【发布时间】:2015-06-06 06:34:32
【问题描述】:

我通过敲除创建了一个可重用的网格组件,我发现我的 html 变得非常臃肿,带有 data-bind="..." 字符串,特别是对于 <td> 元素。

我可以有一个包含 8 列和仅 20 行的网格,这将产生 160 个单元格。问题是我所有的细胞都是这样的:

<td data-bind="text: typeof rowText == 'function' ? rowText($parent) : $parent[rowText],
event: { dblclick: function() { $root.rowDoubleClicked($parent); } },
css: $data.columnClass">Yale University</td>

我什至可能会添加未来的绑定。

如果有一种方法可以将绑定应用到&lt;tbody&gt;,它会自动将绑定应用到它的子&lt;td&gt; 元素,那就太好了。或者也许有一种方法可以通过 javascript 而不是使用“data-bind”属性来应用绑定?

【问题讨论】:

  • 这听起来像是自定义活页夹的任务。不过,我不记得是怎么做到的了,抱歉。

标签: javascript html asp.net-mvc knockout.js


【解决方案1】:

通常只有您(开发人员)才能查看代码,因此它的外观在总体规划中并不重要。您可以格式化您的标记以使其更易于理解:

<td data-bind="
    text: typeof rowText == 'function' ? rowText($parent) : $parent[rowText],
    event: { dblclick: function() { $root.rowDoubleClicked($parent); } },
    css: $data.columnClass">Yale University</td>

可以通过将该检查推回视图模型来清理您的文本绑定,也许使用为您进行检查的计算。

剔除模板可能有助于“美化”您的标记,但无论如何它实际上只是在移动它。

【讨论】:

  • 我最关心的不是外观,而是 DOM 解析所有字符串以及活页夹一遍又一遍地分解同一个字符串所花费的时间。也许这是微优化,但我一直认为浏览器可能很慢,所以越少越好。这些东西没有通过网络发送,这是最大的瓶颈,所以也许我很迂腐。
  • 我在工作中的一些项目中有一些严重的淘汰标记,性能并不是问题。主观的,我知道。
猜你喜欢
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
  • 2014-05-31
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多