首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在数据绑定视图中模板化If-Else结构?

如何在数据绑定视图中模板化If-Else结构?
EN

Stack Overflow用户
提问于 2012-07-19 12:33:32
回答 3查看 80.7K关注 0票数 95

我经常发现自己在基于KO的HTML模板中使用这个习惯用法:

代码语言:javascript
复制
<!-- ko if: isEdit -->
<td><input type="text" name="email" data-bind="value: email" /></td>
<!-- /ko -->
<!-- ko ifnot: isEdit -->
<td data-bind="text: email"></td>
<!-- /ko -->

在KO中有没有更好/更干净的方法来做条件语句,或者有比只使用传统的if-else构造更好的方法?

另外,我只想指出一些版本的Internet Explorer (IE8/9)不能正确解析上面的示例。请查看this SO question了解更多信息。简单的总结是,不要在表标签中使用注释(虚拟绑定)来支持IE。请改用tbody

代码语言:javascript
复制
<tbody data-bind="if: display"><tr><td>hello</td></tr></tbody>
EN

回答 3

Stack Overflow用户

发布于 2012-07-19 13:07:18

一种方法是使用命名模板(可以支持传递参数):

代码语言:javascript
复制
<!-- ko template: isEdit() ? 'emailEdit' : 'emailDisplay' --><!-- /ko -->
<script id="emailEdit" type="text/html">
    <td><input type="text" name="email" data-bind="value: email" /></td>
</script>
<script id="emailDisplay" type="text/html">
    <td data-bind="text: email"></td>
</script>

另一种选择是使用我的switch/case plugin,它的工作方式如下:

代码语言:javascript
复制
<!-- ko switch -->
    <!-- ko case: isEdit -->
        <td><input type="text" name="email" data-bind="value: email" /></td>
    <!-- /ko -->
    <!-- ko case: $else -->
        <td data-bind="text: email"></td>
    <!-- /ko -->
<!-- /ko -->
票数 44
EN

Stack Overflow用户

发布于 2014-08-12 22:36:16

为了避免在组合使用if: / ifnot:时重新计算敲除绑定,您可以将它们与“with:”结构结合使用

代码语言:javascript
复制
    <!-- ko with: $data.DoSomePerformanceCriticalWork($data.SomeParameter()) -->
        <!-- ko if: $data.Condition() -->
           ... some markup ...
        <!-- /ko -->
        <!-- ko ifnot: $data.Condition() -->
           ... some markup ...
        <!-- /ko -->
    <!-- /ko -->
票数 4
EN

Stack Overflow用户

发布于 2014-10-13 12:18:28

现在还有knockout-else绑定/插件(我写这个插件是为了解决这个问题)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11553999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档