如果集合为空,则Knockout不会触发afterRender

时间:2013-09-19 17:32:22

标签: javascript knockout.js

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

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

谢谢!

2 个答案:

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

    });
};