data-binding – 绑定到嵌套属性,其中链中的observable可以为null

前端之家收集整理的这篇文章主要介绍了data-binding – 绑定到嵌套属性,其中链中的observable可以为null前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我刚刚阅读了KnockoutJS,当我尝试绑定到可以为null的对象的子属性时,我得到绑定错误,例如:
<div data-bind="text: selectedAccount().DocumentList().length"></div>

因此,一旦调用ko.applyBindings,它就会尝试计算上面的表达式,如果selectedAccount为null(默认情况下是这样),则会抛出错误.我知道我可以像这样创建一个dependentObservable:

viewmodel.docLength = ko.dependentObservable(function () { 
    return selectedAccount() ? selectedAccount().DocumentList().length : null;
})

但我想知道是否有一个解决方案,除了在viewmodel中放置属性只是因为我得到一个绑定错误.

解决方法

几个想法:

如果您不想使用dependentObservable,那么您可以将语句直接放在文本绑定中,如:

<div data-bind="text: selectedAccount() ? selectedAccount().DocumentList().length : null"></div>

甚至更短:

<div data-bind="text: selectedAccount() && selectedAccount().DocumentList().length"></div>

根据您的方案,您还可以在处理潜在的空值时使用模板绑定.它会是这样的:

<div data-bind="template: { name: 'accountTmpl',data: selectedAccount }"></div>

<script id="accountTmpl" type="text/html">
    ${DocumentList().length}
</script>

此外,在Knockout的1.3版本中,将会有一些控制流绑定可能对您有所帮助.特别是“if”或“with”绑定适用于这种情况.它们在这里描述:https://groups.google.com/d/topic/knockoutjs/pa0cPkckvE8/discussion

猜你在找的JavaScript相关文章