2013-08-08 4 views
0

:Angular/breeze의 변경 사항을 모니터링하는 방법은 무엇입니까? 다음 코드와

<button ng-disabled="!hasChanges" class="btn btn-warning cancel" ng-click="cancel()">Cancel</button> 

이를 :

$scope.hasChanges = datacontext.manager.hasChanges; 

내가보기에 현재 바람 컨텍스트가 가능하도록 변경 사항이 있는지 여부에 대한 통찰력을 제공하기 위해 노력하고있어이/일부 버튼을 비활성화 보기에서 true/false를 설정하면 작동하지만 hasChanges 또는 haschanges()를 호출하려고하면 버튼이 항상 비활성화됩니다. 아무 소용

$scope.$watch(datacontext.manager.hasChanges, function() { 
    $scope.hasChanges = datacontext.manager.hasChanges; 
}); 

:

나는이 시도했다.

바람에 hasChanges가 변경되면보기를 어떻게 표시 할 수 있습니까? 녹아웃에서 나는 관찰할만한 것을 사용할 것입니다 ... 내가 여기서 잘못하고있는 것이 궁금합니다.

답변

1

문제는 고전적인 자바 스크립트입니다. 소유 객체 (manager)에서 찢어진 함수 (hasChanges)를보고 있습니다.

대신을 시도해보십시오

$scope.isCancelDisabled = function() {return !datacontext.manager.hasChanges();};

은 다음과 같이 당신의 HTML을 쓰기 : 자주 datacontext.manager.hasChanges()를 호출 물론

 
<button ng-disabled="isCancelDisabled()" ... ng-click="cancel()">Cancel</button> 

. 꽤 빠르지 만, 대략 모든 다이제스트주기의 두 배라고 부를 것입니다. (그리고 "IF"를 의미하는) 측정을 통해 화면에 너무 느리다는 것을 알게됩니다 (다시 "IF"라고 말했습니다) ... cancelDisabled을 VM 필드로 바꿀 수 있고 제이가 제안한대로 hasChangesChanged 이벤트. 나는 괴롭힐 지 모르겠다.

+0

와드 감사합니다! – RobVious

2

Breeze EntityManager에는 구독 할 수있는 "hasChangesChanged"이벤트가 있습니다. 비슷한 :

myEntityManager.hasChangesChanged.subscribe(function(args) { 
    var hasChanges = args.hasChanges; 
    var entityManager = args.entityManager; 
    ... do something interesting... 
}); 

EntityManager에는 유용 ​​할 수도있는 EntityChanged 이벤트가 있습니다.

또한 참조 : $scope.hasChanges = datacontext.manager.hasChanges;EntityManager api docs

+0

감사합니다. Jay. 나는 약간의 손실 (Breeze를 처음 사용)입니다. 시간이 있다면 각도 코드/뷰와 어떻게 짝을 맞출 수 있습니까? – RobVious

+0

신경 쓰지 마라, 알았다. 감사합니다 :) – RobVious

관련 문제