2013-07-31 4 views
2

durandal/knockout/sammy에 문제가 있습니다. 어떤 것이 범인인지 확실하지 않습니다. 때때로 내 var 뿌리 = 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)); 
}; 

내보기 : 나는 정확한 길이를 표시합니다 그것의 '길이'로, 반복해서 범위를 새로 칠 경우 가장 그 시간의. 때로는 0이되고 foreach 내부의 UI는 표시되지 않습니다.

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

답변

2

당신은 약속이 완료되면, 그렇지 않으면 알 수 없습니다의 activate 함수의 약속을 return해야합니다.

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

이렇게하면 약속이 완료 될 때까지 데이터 바인딩이 수행되지 않아보고있는 경쟁 조건이 제거됩니다.

관련 문제