我有一些淘汰模板,其中的值来自viewmodel。在某些情况下,值不会进入,因为它们尚未设置(用户设置他们想要单选按钮说的内容等)。在那些我试图绑定这些值的情况下,它当然会返回一个typeError。
要解决此问题,我尝试在viewModel中设置默认值,但这根本不起作用。我现在试图在淘汰赛中看到f我只能运行数据绑定,否则忽略它。
我尝试用ko if
语句包装它,但这似乎也失败了。 E.g:
<!-- ko if: value -->
<input autocomplete="off" type="text" data-bind="text: value" />
<!-- /ko -->
有没有办法让这项工作?我真的不想重做我所有的模板(接近50个)。
答案 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 -->