Подтвердить что ты не робот

Loopback: встроенная модель не работает в автономной синхронизации

Я следовал примеру 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": []
}

В стороне сервера 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. Я обновил файл модели-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();
});

Он создает проект, но не смог создать встроенную модель. Он отображает "Не удалось прочитать свойство create undefined"? Есть ли способ создать встроенную модель на стороне клиента?

UPDATE
Встроенная модель работает только на стороне сервера. Но когда в браузере создайте browse.bundle.js, он не сможет добавить встроенную модель.

4b9b3361

Ответ 1

Я следил за методом проб и ошибок и пришел к решению о встроенной встроенной модели. Как и ранее, я определил отношения между Project и ProjectMember в каталоге "common/models/". То, что я нахожу, я должен определить отношения в модели клиентской стороны. Поэтому я сделал следующие шаги, и он работает.

  • Я создал 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
         }
       }
     }
    }  
    

Итак, сделайте вывод, что если вы хотите, чтобы ваша встроенная модель работала в автономном режиме, вы должны переопределить отношения в модели на стороне клиента.