Knockout.js 仅当property=value时才显示Knockout foreach?

Knockout.js 仅当property=value时才显示Knockout foreach?,knockout.js,Knockout.js,我最初的想法如下: <span data-bind="foreach: objects"> <span data-bind="if: object.type() === 'menuItem'> ... </span> </span> 您不能将if嵌入到与foreach相同的元素中,因为它们试图控制相同的子体绑定,这是尝试时敲除会给您带来的错误 使用无容器装订是100%正确的方向。另一种选择是在条件位于其内部的情况

我最初的想法如下:

<span data-bind="foreach: objects">
    <span data-bind="if: object.type() === 'menuItem'>
       ...
    </span>
</span>


您不能将
if
嵌入到与
foreach
相同的元素中,因为它们试图控制相同的子体绑定,这是尝试时敲除会给您带来的错误

使用无容器装订是100%正确的方向。另一种选择是在条件位于其内部的情况下使用computed,但这将表示逻辑引入视图模型中-

var showingObjects= ko.computed(function () {
    return ko.utils.arrayFilter(objects(), function(object) {
        return object.type() === 'menuItem';
    });
});
视图模型-

var showingObjects= ko.computed(function () {
    return ko.utils.arrayFilter(objects(), function(object) {
        return object.type() === 'menuItem';
    });
});
看法-

<span data-bind="foreach: showingObjects">
       ...
</span>

...

所以如果我有1000个对象,其中5个是菜单文件夹,我就不必担心dom中的995KO注释了?我不是在挖苦你,我只是想确认一下。如果你想让被隐藏的995对象被正确的数据绑定,并显示你正在测试的值是否发生了变化,那么正确的话,你需要把995注释保留在那里,或者使用前面提到的计算方法。在视图模型中有表示逻辑是完全正确的。这就是为什么它是一个视图模型,而不仅仅是一个模型。答案仍然很清楚,在这种情况下,至少有两个答案是适用的,这取决于开发人员决定哪一个最适合他们的应用程序