在绑定之前检查值是否存在

时间:2015-05-12 17:06:23

标签: javascript knockout.js

我有一些淘汰模板,其中的值来自viewmodel。在某些情况下,值不会进入,因为它们尚未设置(用户设置他们想要单选按钮说的内容等)。在那些我试图绑定这些值的情况下,它当然会返回一个typeError。

要解决此问题,我尝试在viewModel中设置默认值,但这根本不起作用。我现在试图在淘汰赛中看到f我只能运行数据绑定,否则忽略它。

我尝试用ko if语句包装它,但这似乎也失败了。 E.g:

<!-- ko if: value -->
   <input autocomplete="off" type="text" data-bind="text: value" />
<!-- /ko -->

有没有办法让这项工作?我真的不想重做我所有的模板(接近50个)。

1 个答案:

答案 0 :(得分:0)

对于您当前正在尝试的方法,您需要使用value惯用法将!!强制转换为布尔值(然后还要求您执行它以获取observable的)。此外,您的示例使用的text绑定对input元素没有多大意义,请改用value绑定。例如:

var vmWithValue = { value: ko.observable('my value') };
var vmWithoutValue = { value: ko.observable(undefined) };

ko.applyBindings({ items: [vmWithValue, vmWithoutValue] });
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

<!-- ko foreach: items -->
  <!-- ko if: !!value() -->
    <input autocomplete="off" type="text" data-bind="value: value" />
  <!-- /ko -->
<!-- /ko -->