我有一个简单的ko可观察的客户对象数组。视图中有一个简单的foreach数据绑定,使用table/tr/ the元素。customer对象的一个属性是一个"notes“字段,它可以包含多达1000个字符。
当视图第一次加载时,我将"notes“属性的text属性绑定到一个函数,该函数以”.“返回注释的前100个字符。以表明如果适用的话还有更多的文本。
如果用户单击复选框以“查看完整备注”,我希望刷新notes列,但这一次我不对其进行子字符串,而是显示整个值。如何让KO重新评估foreach,具体来说,我可以刷新notes列吗?
在此过程中,实际可观察到的数组值根本没有变化,只是显示正在改变。
(如果重要的话使用durandal2.0框架)
发布于 2013-11-09 07:52:00
可以使用可观察到的计算值来完成这一任务,如以下所示( http://jsfiddle.net/MA8Mu/2/):
html:
showFullNotes: <input type="checkbox" data-bind="checked:showFullNotes" /><br />
<table>
<tbody data-bind="foreach:customers">
<tr>
<td>
<span data-bind="text:actualNotes"></span>
</td>
</tr>
</tbody>
</table>联署材料:
var Customer = function(notes, parent ){
var self = this;
self.notes = ko.observable(notes);
self.actualNotes = ko.computed(function() {
if (parent.showFullNotes()){
return self.notes();
} else {
return self.notes().substring(0,5) + "...";
}
}, self);
}
var VM = function(){
var self = this;
self.showFullNotes = ko.observable(false);
self.customers = ko.observableArray(
[new Customer("123456789", self),
new Customer("abcderfgh", self)]
);
}
var vm = new VM();
ko.applyBindings(vm);https://stackoverflow.com/questions/19871746
复制相似问题