使用以下代码:
$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发生变化时,如何判断视图?在淘汰赛中我会使用一个可观察的......我想知道我在这里做错了什么。
答案 0 :(得分:2)
Breeze EntityManager有一个您可以订阅的“hasChangesChanged”事件。类似的东西:
myEntityManager.hasChangesChanged.subscribe(function(args) {
var hasChanges = args.hasChanges;
var entityManager = args.entityManager;
... do something interesting...
});
EntityManager还有一个可能有用的EntityChanged事件。
答案 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
事件。我不确定我会打扰。