我有一个如下所示的Knockout模板,一切都很好,包括绑定完成后调用的 myFunction 事件处理程序 - 只要 myItems 集合有任何元素。
当视图模型在 myItems 集合中有0个元素时, afterRender 似乎无法触发。
<table>
<tbody data-bind="template: { foreach: myItems, afterRender: myFunction }">
<tr>
<td data-bind="text: $someProperty"></td>
</tr>
</tbody>
</table>
当没有数据时视图模型已被数据绑定后,是否还有其他可用于调用某些逻辑的Knockout事件?
我希望能够确定何时呈现模板,无论它是否具有任何元素。
谢谢!
答案 0 :(得分:0)
模板是集合中项目的容器。如果你的收藏品中没有任何物品,那么就没有任何东西可以呈现,并且'afterRender'没有被解雇 - 这是常识。
您是否可以指定在此活动中要实施的内容,并尝试帮助您实现目标。
答案 1 :(得分:0)
我决定简单地修改AJAX调用的回调,以显式调用afterRender事件处理程序(巧妙命名为 afterRender ):
FUNCTIONS.InvoiceList = function(target) {
var self = this;
self.target = target;
self.invoices = ko.observableArray();
self.afterRender = function() {
$('.loading').hide();
};
$.getJSON("http://hostname/api/invoices", function (data) {
self.invoices(data);
// Invoke event handler even when there are no items
if(data.length==0) {
self.afterRender();
}
});
};