Breeze 创建实体,本地更新

Breeze 创建实体,本地更新,breeze,Breeze,我有一个显示在页面上的测试对象列表,我希望能够使用breeze将新实体添加到此列表中 我要做的第一件事是使用以下代码从服务器中初始化当前数据: var getTestObjects = function (testObjects) { var query = EntityQuery.from('TestObject'); return manager.executeQuery(query) .then(querySucceeded)

我有一个显示在页面上的测试对象列表,我希望能够使用breeze将新实体添加到此列表中

我要做的第一件事是使用以下代码从服务器中初始化当前数据:

var getTestObjects = function (testObjects) {
        var query = EntityQuery.from('TestObject');

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

        function querySucceeded(data) {

            if (testObjects) {
                testObjects(data.results);
            }
            datacontext.testObjects = getLocal('TestObject');
        };
    };

function getLocal(resource) {
        var query = EntityQuery.from(resource);
        return manager.executeQueryLocally(query);
}
接下来,我调用对象的Create方法:

var createTestObject = function (initialValues) {
        var testObjectType = manager.metadataStore.getEntityType("TestObject");
        var newTestObject = testObjectType.createEntity(initialValues);
        return manager.addEntity(newTestObject);
    };

datacontext.createTestObject({ name: 'test' });
datacontext.saveChanges();

所有这些都工作正常,实体被添加到数据库中,但是当我调用
datacontext.testObjects
(本地可用的实体)时,它没有新添加的项。这是可用的还是我必须再次从服务器获取数据?

您的datacontext不是任何Breeze类型的实例,因此我不知道您的“datacontext.textobjects”是什么。但是如果希望entityManager中的所有本地实体,只需调用entityManager.getEntities();因此,在您的示例中,请使用:

var localEntities = manager.getEntities();

有关更多信息,请参见:

还要创建新实体,OP应使用manager.createEntity('EntityName',{properties});实际上,如果testObjectType是EntityType,那么调用EntityType.createEntity方法应该可以。抱歉,我应该说得更清楚些-datacontext是我的viewmodel,因此datacontext.textobjects在本地调用manager.ExecuteQueryLocal。没有意识到getEntities的存在!非常感谢你!