环回:嵌入式模型在脱机同步中不起作用

时间:2015-10-11 12:34:06

标签: node.js synchronization offline loopbackjs strongloop

我已经按照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时,它无法添加嵌入式模型。

1 个答案:

答案 0 :(得分:0)

我遵循了试错法,并找到了离线嵌入式模型的解决方案。 和以前一样,我只在" 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
         }
       }
     }
    }  
    
  4. 因此,结论是如果您希望嵌入式模型在离线状态下工作,则必须重新定义客户端模型中的关系。