击倒“;如果viewModel属性包含'一些文本'&”;

Knockout "If viewModel property contains 'some text'"

本文关键字:文本 包含 如果 viewModel 属性 击倒      更新时间:2023-09-26

我在这里依赖的答案是如何在knockout中检查包含,但它似乎是针对knockout的过时版本。我正在尝试做一些类似的事情:

<li>
   <span data-bind="text: Subject"></span>
   <!-- ko if: Subject.contains('Important') -->
      <i class="fa fa-exclamation-triangle"></i>
   <!-- /ko -->
</li>

如果主题文本包含单词"重要",则在ko主题文本后附加font真棒图标。然而,这不起作用("联系人"不是一个函数),我正在努力寻找一个"最新"的解决方案。

如果您希望有一个可观察性的contains方法,您可以将其添加为自定义函数。或者您可以将它添加到vm.Subject中,也可以按照Matt的建议将其内联。

ko.observable.fn.contains = function (str) {
  return this().indexOf(str) > -1;
};
vm = {
  Subject: ko.observable('This is Important')
};
ko.applyBindings(vm);
setTimeout(() => vm.Subject('This is not'), 1500);
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<span data-bind="text: Subject"></span>
<!-- ko if: Subject.contains('Important') -->
<i class="fa fa-exclamation-triangle"></i>
<!-- /ko -->

这就是我最终得到的:

<li>
   <span data-bind="text: Subject"></span>
   <!-- ko if: Subject().indexOf('Important') !== -1 -->
   <i class="fa fa-exclamation-triangle"></i>
   <!-- /ko -->
</li>

它起作用了!谢谢,Matt.kaaj。如果我在多个地方做这件事,我认为罗伊的方式是可行的,但由于我只在网站上检查过一次关键字字符串,所以我选择了直接的内联解决方案。谢谢你们两个!