如果集合为空,则在渲染后不会触发挖空

Knockout does not trigger afterRender if collection is empty

本文关键字:集合 如果      更新时间:2023-09-26

我有一个如下所示的 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 事件可用于在视图模型进行数据绑定后调用某些逻辑?

我希望能够确定何时呈现模板,无论它是否有任何元素。

谢谢!

我决定简单地修改 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();
        }
    });
};

模板是集合中项的呈现容器。如果您的集合中没有任何项目,因此没有要渲染的内容,并且不会触发"afterRender" - 这是常识。

您能否指定要在此事件中实现的内容,我尽力提供帮助。