我在玩breezejs,但我遇到的问题是计算出的淘汰赛observable 没有得到更新。让我用一个虚构的例子来解释:
我有一个实体(会话)与另一个实体(演讲者)有一对多的关系。我使用微风js中的扩展功能获取所有相关演讲者的所有会话:
breeze.EntityQuery.from('Sessions').expand('Speakers');
在微风管理器上,我在实体构造函数中配置了一个计算的 observable:
var mgr = new breeze.EntityManager(config.remoteServiceName);
mgr.metadataStore.registerEntityTypeCtor('Session', null, sessionInitializer);
function sessionInitializer(session) {
session.hasOldSpeaker = ko.computed(function () {
for (var i = 0; i < session.speakers.length; i++) {
var speaker = session.speakers[i];
if (speaker.age() > 40) {
return true;
}
}
return false;
});
}
然后我可以在视图中收听这个 observable:
<span data-bind="visible: session.hasOldSpeaker">....</span>
现在我有一个可以从会话中删除旧扬声器的按钮,这样我们就不再有任何旧扬声器了。我发出一个普通的ajax请求来做这件事,因为它不仅仅是更新数据库,还必须做一些其他的工作,所以我认为我不能轻而易举地做到这一点。无论如何,工作完成后,我告诉微风刷新实体:
var refreshQuery = breeze.EntityQuery.fromEntities(session).expand('Speakers');
manager.executeQuery(refreshQuery);
刷新似乎工作正常,因为会话的相关发言人列表现在是空的 - 但视图不会更新以隐藏上面的跨度。
有人知道为什么计算绑定没有更新吗?
如果我刷新页面,那么它会正确隐藏跨度。
更新
在使用 Breeze 的 entityAspect.setDeleted 将会话的所有发言者标记为已删除进行测试后,我可以看到淘汰赛绑定按预期工作。所以我认为问题在于我刷新会话实体的方式。也许有人有更好的方法来使用这样的微风?- 这不仅仅是数据库更新,我还需要在服务器上启动一些工作。使用 Breeze 执行此操作的最佳方法是什么?