2015-10-11 2 views
10

Я следовал примеру loopback offline sync и создал свою собственную модель со встроенным документом. Я создал модель с именем Project, где ProjectMembers - встроенная модель. Вот моя модель:
Project.jsonLoopback: Embedded Model не работает в автономной синхронизации

{ 
    "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(); 
}); 

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

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

+0

Вы можете поделиться журналом ошибок для «Не удалось прочитать свойство create undefined»? –

+0

вот журнал ошибок: Uncaught (в обещании) TypeError: Не удается прочитать свойство 'create' of undefined – nutboltu

ответ

0

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

  1. Я создал файл json - «lbclient/models/local-project-member.json».

    { 
        "name": "LocalProjectMember", 
        "base": "ProjectMember" 
    } 
    
  2. Добавлены следующие строки в "lbclient/модель-config.json".

    "LocalProjectMember":{ 
        "dataSource": "local" 
        } 
    
  3. Измененный "lbclient/модели/локальный_файл project.json" файл, как показано ниже.

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

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

Смежные вопросы