在foreach中加载所有项目后,Knockoutjs组件回调

时间:2015-04-02 20:29:34

标签: javascript facebook knockout.js

我在knockoutjs中有一个组件,可以使用javascript graph api从Facebook创建专辑列表。

如何在渲染所有项目后调用函数?

我已经尝试了foreach: {data: items, afterRender: afterItemsLoaded} - 方法afterItemsLoaded会在每次渲染所有项目后都被调用。

我尝试使用以下代码:

HTML:

<h1>List: </h1>
<list></list>

使用Javascript:

var countOfItemLoaded = 0;

ko.components.register('list', {
    viewModel: function() {
    },
    template: '<div data-bind="foreach: {data: items, afterRender: afterItemsLoaded}"><div data-bind="text: $data"></div></div>'
});

var viewModel = function() {
    var self = this;
    self.items = ko.observableArray([]);

    $.getJSON("https://graph.facebook.com/410564482402231/albums?fields=photos,name,photos.name",  function (result) {   
            $.each(result.data,function(key, item)  {            
                self.items.push(item.name);
            });

    });


    self.afterItemsLoaded = function() {
        countOfItemLoaded = countOfItemLoaded + 1;
        alert("Loaded item " + countOfItemLoaded);
    }
};

ko.applyBindings(viewModel);

在jsFiddle演示:

jsFiddle link

1 个答案:

答案 0 :(得分:2)

我认为还没有为此添加支持。

请参阅:https://github.com/knockout/knockout/pull/339

在Knockout工作的Ryan Niemeyer几乎在2年前就向其他人提供了这个解决方案 knockoutJS execute callback after foreach finishes rendering