Knockout“如果viewModel属性包含'some text'”

时间:2016-08-04 15:25:31

标签: javascript knockout.js

我依靠这里的答案How to check contain in knockout,但它似乎是一个过时的Knockout版本。我正在尝试做类似的事情:

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

如果该主题文本包含单词“重要”,则将fontawesome图标附加到ko主题文本。然而,这不起作用('包含'不是一个函数),我正在努力寻找一个“最新”的解决方案。

2 个答案:

答案 0 :(得分:1)

如果您希望有一个contains方法用于观察,您可以add it as a custom function。或者您可以将其添加到vm.Subject,或者您可以将其内联为Matt建议。

&#13;
&#13;
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);
&#13;
<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 -->
&#13;
&#13;
&#13;

答案 1 :(得分:1)

这就是我最终的结果:

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

它有效!谢谢,Matt.kaaj。如果这是我在多个地方做的事情,我认为Roy的方式是可行的,但由于我只是在网站上检查一次关键字的字符串,所以我采用了简单的内联解决方案。谢谢你们两个!