如何延迟评估元素的knockout绑定,直到数据从ajax调用返回

时间:2016-07-08 14:11:54

标签: javascript jquery ajax knockout.js fancytree

我正在使用Durandal和Knockout。

在我的HTML中我有

<div id="fancytree-users" data-bind="fancytree: userlist"></div>

我有一个自定义绑定:

    ko.bindingHandlers.fancytree = {
        init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
            var tm = valueAccessor();
            var tmUnwrapped = tm();
            $(element).fancytree({
                minExpandLevel: 1,
                source: tmUnwrapped,
            })
        }

在我的“附加”活动中我做了

initTree();

这是:

        return dc.getUserList()
        .then(function (data) {
            self.userlist(tv.loadUserTree(data, userTreeData));
        })

它调用的方法是:

var getUserList = function () {

    return $.getJSON("/api/admin/getUsers", {})
        .done(function (data) {
            return data;
        })
};

但似乎我有竞争条件。如果我将调试放在我的绑定处理程序中,那么9次中有9次会在我从ajax调用返回数据之前触及它。由于此时valueAccessor参数中没有任何内容,因此我的树视图中没有显示任何内容。其他1次中有10次可行并且树视图看起来很好。

如何在评估自定义绑定之前强制我的UI等待userlist observableArray填充?

0 个答案:

没有答案