我已经按照loopback offline sync示例创建了自己的嵌入式文档模型。
我创建了一个名为Project的Model,其中ProjectMembers是嵌入式模型。这是我的模特:
Project.json
{
"name": "Project",
"base": "PersistedModel",
"strict": "throw",
"persistUndefinedAsNull": true,
"trackChanges": true,
"properties": {
...
},
"relations": {
"members": {
"type": "embedsMany",
"model": "ProjectMember",
"property": "members",
"options": {
"validate": true,
"forceId": false
}
}
}
}
ProjectMember.json
{
"name": "ProjectMember",
"base": "Model",
"idInjection": true,
"properties": {
...
},
"validations": [],
"relations": {},
"acls": [],
"methods": []
}
在服务器端model-config.json中,我更新了数据源,如下所示:
"Project": {
"dataSource": "my_db"
},
"ProjectMember": {
"dataSource": "transient"
}
在lbclient / models /的客户端,我添加了2个文件local-project.json和remote-project.json,与local-todo.json和remote-todo.json完全相同。 我更新了客户端model-config.json文件,如下所示:
"RemoteProject": {
"dataSource": "remote"
},
"LocalProject": {
"dataSource": "local"
}
在客户端控制器中,我运行以下代码:
ProjectModel.create($scope.project)
.then(function(project) {
var owner = loginDetails.getLoginUser();// the member
owner.role = 'owner';
owner.status = 'active';
project.members.create(owner); //shows error: couldn't read property
$scope.project = {};
$scope.$apply();
});
它创建了Project但无法创建嵌入式模型。它显示"无法读取属性创建未定义"?有没有办法在客户端创建嵌入式模型?
更新
嵌入式模型仅适用于服务器端。但是当browserify创建browse.bundle.js时,它无法添加嵌入式模型。
答案 0 :(得分:0)
我遵循了试错法,并找到了离线嵌入式模型的解决方案。 和以前一样,我只在" common / models /"中定义了Project和ProjectMember之间的关系。目录。我发现,我必须在客户端模型中定义关系。所以我做了以下步骤,但它确实有效。
我创建了一个json文件 - " lbclient / models / local-project-member.json"。
{
"name": "LocalProjectMember",
"base": "ProjectMember"
}
在" lbclient / model-config.json"中添加了以下行。
"LocalProjectMember":{
"dataSource": "local"
}
修改了" lbclient / models / local-project.json"文件如下。
{
"name": "LocalProject",
"base": "Project",
"relations":{
"members": {
"type": "embedsMany",
"model": "LocalProjectMember",
"property": "memberList",
"options": {
"persist": true,
"validate": true,
"forceId": false
}
}
}
}
因此,结论是如果您希望嵌入式模型在离线状态下工作,则必须重新定义客户端模型中的关系。