【问题标题】:Templates in KnockoutJS, empty string isn't renderingKnockoutJS 中的模板,空字符串不呈现
【发布时间】:2011-08-08 05:41:41
【问题描述】:

我在使用 KnockoutJS 将二维数组呈现为表格时遇到了问题。我创建了一个demo fiddle,但这是相关的模板代码:

<script type="text/x-jquery-tmpl" id="resultRowTemplate">
    <tr data-bind="template: { name: 'resultColumnTemplate', foreach: $data }"></tr>
</script>

<script type="text/x-jquery-tmpl" id="resultColumnTemplate">
    <td>-${$data}-</td>
</script>

<table>
    <tbody data-bind="template: { name: 'resultRowTemplate', foreach: Results }"></tbody>
</table>

我的问题是当数据为空字符串时未呈现 resultColumnTemplate。我猜内部的东西将空字符串视为 null/false 并决定不应该渲染它。

您可以在my fiddle 中看到这一点。我希望它呈现为

-1- -2- -- -4-

而不是我所看到的:

-1- -2- -4-

我有一个解决方法,通过更改我的数据将空字符串替换为单个空格,但希望有人可能对问题有更好的建议或理解。谢谢。

【问题讨论】:

    标签: javascript multidimensional-array knockout.js jquery-templates


    【解决方案1】:

    Knockout 在通过 jQuery 模板插件发送之前将每个项目放入自己的数组中,这样它就不会尝试解开本身就是数组的项目。

    似乎 jQuery 模板不会呈现为空/null/未定义的数组项。

    我认为您的选择是:

    • 做你所做的(用“”替换项目)
    • 删除最里面的模板并在您的数组上执行{{each}}
    • 映射您的数组以使用对象[{value: 1}, {value: 2}, {value: ""}, {value: 4}]

    【讨论】:

    • 谢谢。使用了{{each}} 的建议,似乎是最轻量级和最少hackish 的解决方案。我会暂时将您标记为答案,以防其他人还有更简洁的东西。
    猜你喜欢
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2020-06-30
    • 2011-04-28
    • 2018-08-30
    • 2021-07-28
    相关资源
    最近更新 更多