2015-10-11 12 views
10

私はloopback offline syncの例に従っており、埋め込まれたドキュメントで自分のモデルを作成しています。 ProjectMembersが組み込みモデルであるProjectという名前のモデルを作成しました。ここに私のモデルです:
私は以下のようにデータソースを更新し、サーバー側モデル-config.jsonで 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": [] 
} 

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

また、lbclient/models /のクライアント側では、local-todo.jsonとremote-todo.jsonと全く同じ2つのファイルlocal-project.jsonとremote-project.jsonを追加しました。 私は以下のようにクライアント側モデル-config.jsonファイル更新:それはプロジェクトを作成します

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

が、埋め込まれたモデルの作成に失敗しました:私は以下のコードを実行し、クライアントコントローラで

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

を。 「未定義のプロパティを読み取れませんでした」と表示されますか?クライアント側に組み込みモデルを作成する方法はありますか?

更新
埋め込みモデルはサーバー側でのみ機能します。しかし、browserifyがbrowse.bundle.jsを作成すると、埋め込みモデルの追加に失敗します。

+0

「未登録のプロパティを読み取れませんでした」のエラーログを共有できますか? –

+0

ここにエラーログがあります: 未知(約束)TypeError:未定義のプロパティ 'create'を読み取ることができません – nutboltu

答えて

0

私は試行錯誤の方法に従い、オフライン埋め込みモデルについて解説しました。 以前のように、私は "common/models /"ディレクトリにProjectとProjectMemberの関係を定義しました。私が見つけたのは、クライアント側のモデルでも関係を定義する必要があるということです。だから私は次のステップを実行し、それは動作します。

  1. "lbclient/models/local-project-member.json"というファイルを作成しました。

    { 
        "name": "LocalProjectMember", 
        "base": "ProjectMember" 
    } 
    
  2. 「lbclient/model-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 
        } 
        } 
    } 
    } 
    

だから、結論は、オフライン上の埋め込まれたモデルの仕事をしたい場合は、クライアント側モデルの関係を再定義する必要があります。

関連する問題