0

我有一个如下所示的 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 事件?

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

谢谢!

4

2 回答 2

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();
        }

    });
};
于 2013-09-19T18:23:28.707 回答
0

模板是您收藏中项目的容器。如果您的集合中没有任何项目,则没有可渲染的内容并且不会触发“afterRender” - 这是常识。

你能指定你想在这个事件中实现什么,我会尽力帮助你做这件事。

于 2013-09-19T17:46:33.283 回答