环回:嵌入式模型在离线同步中不工作

Loopback: Embedded Model is not working in offline sync

我按照 loopback offline sync 示例创建了我自己的嵌入文档模型。 我创建了一个名为 Project 的模型,其中 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": []
}

在服务器端模型中-config.json 我更新了数据源如下:

"Project": {
    "dataSource": "my_db"
},
"ProjectMember": {
    "dataSource": "transient"
}

并且在 lbclient/models/ 的客户端我添加了 2 个文件 local-project.json 和 remote-project.json 与 local-todo.json 和 remote- 完全相同todo.json。 我更新了客户端模型-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();
});

创建项目但未能创建嵌入式模型。它显示 "Couldn't read property create undefined"?有没有办法在客户端创建嵌入式模型?

更新
嵌入式模型仅适用于服务器端。但是当 browserify 创建 browse.bundle.js 时,它无法添加嵌入式模型。

我按照反复试验的方法,得出了一个关于离线嵌入式模型的解决方案。 和之前一样,我只在"common/models/"目录下定义了Project和ProjectMember的关系。我发现,我也必须在客户端模型中定义关系。所以我做了以下步骤并且它起作用了。

  1. 我创建了一个 json 文件 - "lbclient/models/local-project-member.json"。

    {
      "name": "LocalProjectMember",
      "base": "ProjectMember"
    }
    
  2. 在 "lbclient/model-config.json" 中添加了以下行。

     "LocalProjectMember":{
        "dataSource": "local"
      }
    
  3. 修改了 "lbclient/models/local-project.json" 文件如下。

    {
     "name": "LocalProject",
     "base": "Project",
     "relations":{
    
       "members": {
         "type": "embedsMany",
         "model": "LocalProjectMember",
         "property": "memberList",
         "options": {
           "persist": true,
           "validate": true,
           "forceId": false
         }
       }
     }
    }  
    

所以结论是,如果您希望嵌入式模型离线工作,您必须重新定义客户端模型中的关系。