Knockout可观察数组随机不绑定

时间:2013-07-31 22:53:52

标签: knockout.js durandal sammy.js

我在durandal / knockout / sammy遇到问题 - 不确定哪一个是罪魁祸首。偶尔我的var roots = ko.observableArray([]);没有绑定到UI。大部分时间它都很完美。希望SO上有人看到我不知道的东西。

VM激活:

var activate = function () {
        groupsData.GetRoots().then(function (data) {
            roots($.map(data, function (it) { return new groupNode.GroupNode(it); }));
//If I do a console.log(roots()); right here, the correct data shows up
        });
    };

的DataContext:

var getRoots = function () {
    return Q.when($.getJSON(Url));
};

我的观点: 如果我反复点击刷新,其中带有“长度”的跨度将显示正确的长度MOST OF THE TIME。偶尔它会为0,并且foreach内部的UI不会显示。

    <span data-bind="text: roots().length"></span>
    <ul data-bind="foreach: roots">
        //BLA
    </ul>

1 个答案:

答案 0 :(得分:2)

您需要return activate函数中的承诺,否则它将不知道承诺何时完成。

var activate = function () {
    return groupsData.GetRoots().then(function (data) {
        roots($.map(data, function (it) { return new groupNode.GroupNode(it); }));
    });
};

如果你这样做,数据绑定将不会发生,直到承诺结束,这将消除你看到的竞争条件。

相关问题