2015-10-11 15 views
10

Ich habe das loopback offline sync Beispiel verfolgt und ein eigenes Modell mit eingebettetem Dokument erstellt. Ich habe ein Model namens Project erstellt, in dem ProjectMembers eingebettet sind. Hier ist mein Modell:
Project.jsonLoopback: Embedded Model funktioniert nicht in Offline-Synchronisierung

{ 
    "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": [] 
} 

In der Server-Seite Modell-config.json ich die Datenquelle wie unten aktualisiert:

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

Und auf der Clientseite in lbclient/models/habe ich 2 Dateien local-project.json und remote-project.json genauso hinzugefügt wie local-todo.json und remote-todo.json. ich die Client-Seite Modell-config.json Datei wie unten aktualisiert:

"RemoteProject": { 
    "dataSource": "remote" 
}, 
"LocalProject": { 
    "dataSource": "local" 
} 

In den Client-Controller mir die folgenden Codes auszuführen:

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

Es Das Projekt schafft aber nicht das eingebettete Modell erstellen . Es wird angezeigt "Konnte nicht lesen, create nicht definiert"? Gibt es eine Möglichkeit, eingebettete Modelle auf der Clientseite zu erstellen?

UPDATE
Das eingebettete Modell funktioniert nur auf Server-Seite. Wenn das browserify jedoch die Datei browse.bundle.js erstellt, kann das eingebettete Modell nicht hinzugefügt werden.

+0

können Sie das Fehlerprotokoll für "Property create nicht undefiniert" nicht lesen? –

+0

Hier ist das Fehlerprotokoll: Uncaught (in Versprechen) TypeError: Kann Eigenschaft 'create' von undefined nicht lesen – nutboltu

Antwort

0

Ich folgte der Trial-and-Error-Methode und ist zu einer Lösung über Offline-Embedded-Modell gekommen. Wie zuvor habe ich nur die Beziehungen zwischen Project und ProjectMember im Verzeichnis "common/models /" definiert. Was ich finde ist, dass ich die Relationen auch im clientseitigen Modell definieren muss. Also habe ich die folgenden Schritte gemacht und es funktioniert.

  1. Ich habe eine JSON-Datei erstellt - "lbclient/models/local-project-member.json".

    { 
        "name": "LocalProjectMember", 
        "base": "ProjectMember" 
    } 
    
  2. addierten die folgenden Zeilen in "lbclient/Modell-config.json".

    "LocalProjectMember":{ 
        "dataSource": "local" 
        } 
    
  3. Verändert die "lbclient/models/local-project.json", wie nachstehend Datei.

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

So ist das Ergebnis, wenn Sie Ihre Embedded-Modelle arbeiten auf offline wollen, müssen Sie die Beziehungen in der Client-Seite Modell neu zu definieren.