javascript 如何根据$root的值来决定敲除JS中div的出现?

pn9klfpd  于 2023-01-24  发布在  Java
关注(0)|答案(1)|浏览(153)

我想根据某个值显示/隐藏代码中的div。使用Knockout JS上下文调试器,我在$root上下文中找到了需要比较的属性。我从开发者控制台获得的属性路径为:$root_toJS.items.mainItems[0].itemDescription.productId
我尝试了几种方法,基本上是下面代码中'ko if'的不同变体,但都不起作用:

<!-- ko if: $root.items.mainItems[0].itemDescription.productId != 1 -->
    <div class="action-row">
        <a href="#" data-bind="click: execute" class="btn-primary fiori3-btn-primary">

            <span data-bind="text: name"></span>
        </a>
    </div>
<!-- /ko -->

有什么方法可以在“ko if”条件下访问指定路径中的值吗?
谢谢

falq053o

falq053o1#

当你引用变量的时候,我假设它在itemDescription的上下文中,所以你必须确保你也使用了它的确切位置。
在我的第二个例子中,我使用了一个foreach循环来遍历所有的mainItem。注意as: mainItem别名,我不需要再输入整个东西了,你也可以使用$data,但这只会使它复杂化。

class ViewModel {
  constructor() {
    this.items = {
      mainItems: [{
        itemDescription: {
          productId: 1,
          name: 'item one',
        }
      }, {
        itemDescription: {
          productId: 2,
          name: 'item two',
        }
      }]
    };
  }
};

ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>

<h5>this breaks any generic approach but is as your example:</h5>
<!-- ko if: $root.items.mainItems[0].itemDescription.productId !== 1 -->
<div>
  <span data-bind="text: $root.items.mainItems[0].itemDescription.name"></span>
</div>
<!-- /ko -->
<!-- ko if: $root.items.mainItems[1].itemDescription.productId !== 1 -->
<div>
  <span data-bind="text: $root.items.mainItems[1].itemDescription.name"></span>
</div>
<!-- /ko -->

<h5>this embraces it what is probably more what you'd want:</h5>
<!-- ko foreach: { data: $root.items.mainItems, as: 'mainItems' } -->
<!-- ko if: mainItems.itemDescription.productId !== 1 -->
<div>
  <span data-bind="text: mainItems.itemDescription.name"></span>
</div>
<!-- /ko -->
<!-- /ko -->

相关问题