我正在尝试使用 Angularjs 创建一个文件管理器,我最近发现了 Breezejs,并有兴趣尝试使用它与我的后端通信并管理我的模型关系。后端是一个我可以完全控制的 rest api。
然而,我遇到了一个问题。我知道文件的 id,所以我想向格式的 url 发出请求,backend_url/files/:fileId
其中:fileId
文件的 url 是 base64 编码的。根据我应该EntityManager.fetchEntityByKey()
用于此目的的文档。这是我用来创建 Angularjs 服务的函数:
var FilestoreService = function () {
var dataService, manager;
dataService = new breeze.DataService({
serviceName: "../VFS-Symfony-Backend/web/app_dev.php/filesystems/local/",
hasServerMetadata: false
});
manager = new breeze.EntityManager({
dataService: dataService
});
manager.metadataStore.addEntityType(fileEntityType);
return {
findOneById: function (id) {
/* I have tried to leave the 3th argument empty or changing it to false with the same results */
return manager.fetchEntityByKey("File", id, true).then(function(){console.log("success");}).fail(function(){console.log("failure");});
/* I have also tried the following approach with the same result:
var type, key, query;
type = manager.metadataStore.getEntityType("File");
key = new breeze.EntityKey(type, id);
query = breeze.EntityQuery.fromEntityKey(key);
return manager.executeQuery(query);
*/
}
};
};
其中fileEntityType
定义为:
var FileEntityType = new breeze.EntityType({
shortName: "File"
});
FileEntityType.addProperty(new breeze.DataProperty({
name: "uri",
dataType: breeze.DataType.String,
isNullable: false
}));
FileEntityType.addProperty(new breeze.DataProperty({
name: "mTime",
dataType: breeze.DataType.Int16,
isNullable: false
}));
FileEntityType.addProperty(new breeze.DataProperty({
name: "type",
dataType: breeze.DataType.String,
isNullable: false
}));
FileEntityType.addProperty(new breeze.DataProperty({
name: "size",
dataType: breeze.DataType.int16,
isNullable: true
}));
但是,当我调用时,findOneById
不会向服务器发出任何请求,并且控制台会记录 2 行:
Should be empty:[]
由 q.jsfailure
(根据fail()
回调函数)
“正常”查询 ( manager.executeQuery(new breeze.EntityQuery().from("Files"));
) 确实会按预期向服务器发出请求。
我真的很迷失在这里。我整个周末都在寻找解决方案,最后决定在 SO 上发帖,希望有人能帮助我。
非常感谢您的阅读。