Knockout.js 有没有办法不加载带有淘汰条件的元素?

Knockout.js 有没有办法不加载带有淘汰条件的元素?,knockout.js,Knockout.js,我有一个项目列表,可以是两种类型之一-根据类型,我需要使用不同的样式/布局。我现在所做的是迭代所有项,并为每个项显示两个“模板”,但根据type()的计算方式,每个项只显示一个模板。这看起来很不雅观,因为我真的只需要每个项目一个模板——页面上一半的标记永远不会可见 有没有办法只加载这些项目所需的标记,而不将它们分成两个不同的数组 是的,像这样的东西应该适合你 <div data-bind="foreach: yourArray"> <div data-bind="if

我有一个项目列表,可以是两种类型之一-根据类型,我需要使用不同的样式/布局。我现在所做的是迭代所有项,并为每个项显示两个“模板”,但根据type()的计算方式,每个项只显示一个模板。这看起来很不雅观,因为我真的只需要每个项目一个模板——页面上一半的标记永远不会可见


有没有办法只加载这些项目所需的标记,而不将它们分成两个不同的数组

是的,像这样的东西应该适合你

<div data-bind="foreach: yourArray">

    <div data-bind="if: isTypeOne">
        <div>template for type one</div>
    </div>

    <div data-bind="if: isTypeTwo">
        <div>template for type two</div>
    </div>

</div>

第一类的模板
第二类的模板

这样,每个条件标记中的模板只有在其计算结果为true时才会生成。

是的,类似的内容应该适合您

<div data-bind="foreach: yourArray">

    <div data-bind="if: isTypeOne">
        <div>template for type one</div>
    </div>

    <div data-bind="if: isTypeTwo">
        <div>template for type two</div>
    </div>

</div>

第一类的模板
第二类的模板

这样,每个条件标记中的模板只有在其计算结果为true时才会生成。

您应该做的是将两个“模板”放入实际模板中,并添加一个计算的可观察对象,以决定使用哪个模板。如果您的模板非常复杂,或者有许多不同的模板要显示,这将特别有用

e、 例如,假设您有一个用户:

函数用户(用户){
this.name=ko.observable(user.name);
this.issupurer=ko.observable(user.issupurer);
//这将选择要使用的模板
this.userTemplate=ko.computed(函数(){
返回此
?“用户模板超级用户”
:“用户模板用户”;
},这个);
}
给定一个用户列表,然后可以根据
userTemplate
的内容显示相应的模板


问候超级用户
问候普通用户

你应该做的是将你的两个“模板”放入真实的模板中,并添加一个计算出的可观测值,以决定使用哪个模板。如果您的模板非常复杂,或者有许多不同的模板要显示,这将特别有用

e、 例如,假设您有一个用户:

函数用户(用户){
this.name=ko.observable(user.name);
this.issupurer=ko.observable(user.issupurer);
//这将选择要使用的模板
this.userTemplate=ko.computed(函数(){
返回此
?“用户模板超级用户”
:“用户模板用户”;
},这个);
}
给定一个用户列表,然后可以根据
userTemplate
的内容显示相应的模板


问候超级用户
问候普通用户

非常酷,我不知道我可以用“如果”这样的词。非常感谢。是的,一定要查看淘汰文档,它们非常好。警告不要过度使用if/ifnot:这些语句实际上会在DOM中添加和删除元素。如果您同时对受影响部分中的元素使用jQuery,这可能会导致各种问题。我更喜欢杰夫·梅尔卡多的答案,因为这很酷,我不知道我能用“如果”这样的词。非常感谢。是的,一定要查看淘汰文档,它们非常好。警告不要过度使用if/ifnot:这些语句实际上会在DOM中添加和删除元素。如果您同时对受影响部分中的元素使用jQuery,这可能会导致各种问题。我更喜欢杰夫·梅尔卡多的答案,因为这一点。