我在我的应用程序中使用Angular和Breeze,然后使用" hasChangesChanged"用于处理存储在EntityManager中的实体状态的事件。当我的实体属性为complexType且isScalar = false时,我遇到了问题。 当我提出两次请求(不更改任何实体)并获得相同的实体时,会出现问题。第二次请求" hasChangesChanged"使用hasChanges = true触发事件。 在此事件被触发的那一刻,我的实体具有状态"已修改",但是在加载数据之后该状态被更改为"未更改"。
我写过(Jasmine)单元测试。在评论中是断言引发错误的信息。
var entity,
hasChanges = false,
listeners = {
onChange: function (event) {
console.log('change', event.hasChanges);
}
};
spyOn(listeners, 'onChange');
$httpBackend.expectGET('json/SampleEntity?').respond(200, [
{
id: 1,
name: 'some name',
data: {},
$type: 'SampleEntity',
elements: [
{
etype: 'el1'
}
]
}
]);
manager.hasChangesChanged.subscribe(function (event) {
hasChanges = event.hasChanges;
});
var query = new breeze.EntityQuery('SampleEntity');
manager.executeQuery(query).then(function (data) {
entity = data.results[0];
});
$httpBackend.flush();
expect(hasChanges).toBe(false); // OK
expect(entity.entityAspect.entityState.isUnchanged()).toBe(true); // OK
$httpBackend.expectGET('json/SampleEntity?').respond(200, [
{
id: 1,
name: 'some name',
data: {},
$type: 'SampleEntity',
elements: [
{
etype: 'el1'
}
]
}
]);
manager.executeQuery(query).then(function (data) {
entity = data.results[0];
});
$httpBackend.flush();
expect(hasChanges).toBe(false); // ERROR
expect(entity.entityAspect.entityState.isUnchanged()).toBe(true); // OK
这是预期的行为吗?如果不是我怎么解决它?