Angularjs breezejs hasChangesChanged事件未引发

Angularjs breezejs hasChangesChanged事件未引发,angularjs,breeze,Angularjs,Breeze,不太确定这是AngularJS还是BreezJs的问题 我有一个控制器,我在其中执行以下操作: $scope.mandat = domiciliationService.createMandat(); 在住所服务中: function createMandat () { return manager.createEntity('Mandate'); } 我的视图绑定到$scope.mandat,当我更改绑定到$scope.mandat属性之一的文本框中的值时,我可以看到它反映

不太确定这是AngularJS还是BreezJs的问题

我有一个控制器,我在其中执行以下操作:

$scope.mandat = domiciliationService.createMandat();
在住所服务中:

function createMandat () {
        return manager.createEntity('Mandate');
}
我的视图绑定到$scope.mandat,当我更改绑定到$scope.mandat属性之一的文本框中的值时,我可以看到它反映在实际对象上(通过在范围中显示该值)。到目前为止还不错

但是,从未引发HasChangesAnged事件。在服务中,我是这样订阅的:

manager.hasChangesChanged.subscribe(function (args) {
        var hasChangesChanged = args.hasChanges;
        var entityManager = args.entityManager;
        alert('changed');
    });

就像我在视图中更改值时,它们修改$scope上的对象,但不修改实际的实体。。。我错过了什么

所以在玩了一点这个游戏之后,我发现了两件事。事实上,为了确保我的代码没有问题,我调试了John Papa的Hot Tob应用程序,因为他也使用breeze。这种行为与我的应用程序中的行为相同

  • 创建新实体时,将触发hasChangesChanged事件。然后,当我在绑定到此实体属性的窗体控件中输入数据时,不会触发事件

  • 编辑现有实体时,只有在修改属性时(如果编辑文本框中的值),才会触发HasChangesAnged事件


  • 因此,有人可能会争辩说,在用户开始实际填写数据之前,不应在第一个场景中触发HasChangesAnged事件。但我可以接受。

    首先,您缺少了一个实时代码示例,可能是。很难用breeze来拼凑,我需要一个Web服务来返回元数据。在上面的代码中你不明白什么?我可以更详细地解释。@sam-我有一个你可以用叉子叉的小东西。它涉及到Todo示例,该示例应足以让您演示问题。pkozlowski-我们将很快提供一套劫掠物和jsFiddles,帮助人们开始使用。我同意,这是迄今为止人们澄清和重述问题的最佳方式。你有没有机会给我提供链接?:)@Sam-我无法重现问题。HasChangesAnged事件实际上已引发。尝试下载示例()并在Todo Angular示例中订阅hasChangesChanged。您将看到,每次更改属性(文本或复选框)时都会引发此问题。只有在实体将entityState更改为需要保存后,HasChangesAnged才会触发-如果添加的实体更改了属性,则保存要求没有更改,但更改了第一个属性的现有实体不需要保存。有关更多粒度,请参阅entityChanged事件