Knockout.js 创建多个';空';breeze实体和仅查询这些实体

Knockout.js 创建多个';空';breeze实体和仅查询这些实体,knockout.js,breeze,single-page-application,Knockout.js,Breeze,Single Page Application,好的,我用另一种方式问了这个问题,但还没有看到回应,所以我试图简化这个问题- 我想创建多个实体,并使用Breeze将它们保留在“已添加”实体状态。然后我只想返回那些对象,并通过导航属性将它们绑定回父对象 var createEntities = function (parent) { manager.createEntity('child', {parentId = parent.id()}); }; 然后查询父级,并仅返回为添加视图创建的实体- var getThoseDamnedE

好的,我用另一种方式问了这个问题,但还没有看到回应,所以我试图简化这个问题-

我想创建多个实体,并使用Breeze将它们保留在“已添加”实体状态。然后我只想返回那些对象,并通过导航属性将它们绑定回父对象

var createEntities = function (parent) {
    manager.createEntity('child', {parentId = parent.id()});
};
然后查询父级,并仅返回为添加视图创建的实体-

var getThoseDamnedEntities = function (parentObservable) {
        var query = EntityQuery.from('Parents')
            .where('id', '==', parentObservable.id())
            .expand('Child');

        return manager.executeQuery(query)
            .then(querySucceeded)
            .fail(queryFailed);

        function querySucceeded(data) {
            if (parentObservable) {
                parentObservable(data.results);
            }
            log('Retrieved [Parent] from remote data source',
                data, true);
        }
};
但是我想按entityState.Added筛选子结果,这样我只返回尚未保存的新实体,以便在保存之前可以对其进行修改。有什么建议吗


为了解释这一点,我可以直接按类型查询实体(即query=EntityQuery.from('Child').where()),并使用构造函数来拥有一个只用于“添加”实体的ko.computed属性,但我仍然无法找到如何查询这些实体并通过导航属性将它们绑定回父对象(很抱歉,如果我弄错了这里的术语:)

假设我已经理解了你的问题,你实际上有几种方法可以解决这个问题

首先,您实际上应该只查询entityManager的本地缓存,因为这是唯一可以找到“添加”实体的地方。它们尚未保存(因此仍标记为“已添加”)。您可以通过只对本地缓存执行上面列出的查询的逆查询来实现这一点。(我在这里猜测您的实体类型和属性名称)

它将返回一个承诺,或者你可以同步做同样的事情

var query = EntityQuery.from('Children')
        .where('parent_id', '==', parentObservable.id()) ;
var localChildren = myEntityManager.executeQueryLocally(query);
这将返回本地缓存中与您的筛选器匹配的每个实体,因此如果您只需要“添加”的实体,则需要进一步筛选“本地父对象”,即

var addedLocalChildren = localChildren.filter(function(p) {
   return p.entityAspect.entityState.isAdded();
})
另一种可能更简单的方法是,如果您已经通过外键将父实体链接到子实体,那么entityManager缓存中的任何实体都已经解析了它们的导航属性。这意味着您可以简单地执行以下操作:

var children = parentObservable().child;  // 'children' might be a better name for this prop
var addedLocalChildren = children.filter(function(p) {
   return p.entityAspect.entityState.isAdded();
})

希望这有意义。

Jay我一直在尝试,但p.entityAspect.isAdded()不是有效的函数。p、 entityAspect.entityState.isAdded()可以工作,但按照建议将其设置为筛选器不会返回“添加的”实体。我正在遍历它们,它们肯定是EnumState'Name=“Added”“,但要么isAdded()返回false,要么我做错了什么。你是对的,应该是p.entityAspect.entityState.isAdded(),我刚刚更新了帖子来纠正这一点。我还刚刚确认isAdded()工作正常,所以我猜这里还有其他问题。实际上,isAdded()函数返回true。问题是我移除了过滤器内部的回路:/
var children = parentObservable().child;  // 'children' might be a better name for this prop
var addedLocalChildren = children.filter(function(p) {
   return p.entityAspect.entityState.isAdded();
})