如何监视Angular / breeze中的变化功能?

时间:2013-08-08 17:19:25

标签: angularjs breeze single-page-application

使用以下代码:

$scope.hasChanges = datacontext.manager.hasChanges;

我试图让视图深入了解当前的breeze上下文是否有任何更改来启用/禁用某些按钮:

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

如果我在视图中设置了true / false,但是如果我尝试调用hasChanges或haschanges(),则按钮总是被禁用。

我也试过这个:

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

无济于事。

当微风hasChanges发生变化时,如何判断视图?在淘汰赛中我会使用一个可观察的......我想知道我在这里做错了什么。

2 个答案:

答案 0 :(得分:2)

Breeze EntityManager有一个您可以订阅的“hasChangesChanged”事件。类似的东西:

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

EntityManager还有一个可能有用的EntityChanged事件。

另见:EntityManager api docs

答案 1 :(得分:1)

$scope.hasChanges = datacontext.manager.hasChanges;的问题是经典的JavaScript。您正在观看已从其拥有对象(hasChanges)中撕掉的函数(manager)。

请改为尝试:

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

然后像这样编写你的HTML:

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

当然会经常致电datacontext.manager.hasChanges()。它的速度非常快,但每个摘要周期大约会调用两次。如果(我的意思是“IF”)您通过测量发现这对于您的屏幕来说太慢了(再次,我说“IF”)...您可以将cancelDisabled转换为VM的一个字段并设置它通过听Jay建议的hasChangesChanged事件。我不确定我会打扰。