我正在使用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填充?