我有这个:
function viewModel() {
this.items = ko.observableArray(initialData);
}
ko.applyBindings(viewModel());...and这个:
<div data-bind="foreach: items">
<span data-bind="text: cutOff($data)"></span>
</div>问题:我有多个专栏。对于注释列,我需要一个函数,为每个项显示一个前40个字符的子字符串和:(.)以显示文本已被切断。我试过用一个计算函数。不走运。
我需要这样的东西:
var cutOff= function (fieldName) {
if (fieldName.Length > 40)
return fieldName.substring(0, 40) + "(...)"
else
return fieldName;
}正确的语法对我来说仍然是个谜。这件事可以做吗?谢谢!
发布于 2016-12-16 19:22:58
假设cutOff函数是在viewModel中定义的,如下所示。
function viewModel() {
this.items = ko.observableArray(initialData);
this.cutOff= function (fieldName) {
if (fieldName.Length > 40)
return fieldName.substring(0, 40) + "(...)"
else
return fieldName;
}
}您需要通过bindingContext.访问cutOff函数。因此,在HTML页面中,代码应该类似于。在foreach循环中,span元素的绑定上下文将是单个项或$data。如果需要访问在ViewModel中定义的函数,则需要更改绑定上下文,$parent允许访问父上下文。
<div data-bind="foreach: items">
<span data-bind="text: $parent.cutOff($data)"></span>
</div>更新:给出一个未定义的错误是因为您没有创建viewModel实例。如果您没有创建一个实例,则调用viewModel()、返回未定义和未定义的viewModel函数不包含任何类似cutOff的方法。
因此,您需要像下面所示的那样替换代码,然后它就可以工作了。
ko.applyBindings(new viewModel());https://stackoverflow.com/questions/41190095
复制相似问题