2015-10-11 5 views
10

मैंने loopback offline sync उदाहरण का पालन किया है और एम्बेडेड दस्तावेज़ के साथ अपना खुद का मॉडल बना दिया है। मैंने प्रोजेक्ट नामक मॉडल बनाया जहां 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": [] 
} 

सर्वर साइड मॉडल-config.json में मैं नीचे के रूप में डेटा स्रोत अद्यतन:

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

यहाँ मेरी मॉडल हैं और क्लाइंट साइड में lbclient/models/I में 2 फाइलें स्थानीय-प्रोजेक्ट.जेसन और रिमोट-प्रोजेक्ट.जेसन को स्थानीय-todo.json और दूरस्थ-todo.json के समान ही जोड़ती हैं।

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

ग्राहक नियंत्रक मैं निम्नलिखित कोड चलाने में: मैं नीचे के रूप में ग्राहक के पक्ष मॉडल-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(); 
}); 

यह परियोजना बनाता है लेकिन एम्बेडेड मॉडल बनाने में विफल । यह प्रदर्शित करता है "संपत्ति को अपरिभाषित नहीं पढ़ा जा सका"? क्लाइंट साइड में एम्बेडेड मॉडल बनाने का कोई तरीका है?

अद्यतन
एम्बेडेड मॉडल केवल सर्वर की तरफ काम करता है। लेकिन जब ब्राउजनाइजेशन ब्राउज़.बंडल.जेएस बनाता है, तो यह एम्बेडेड मॉडल को जोड़ने में विफल रहता है।

+0

क्या आप "त्रुटि को पढ़ा नहीं जा सका" के लिए त्रुटि लॉग साझा कर सकते हैं? –

+0

यहां त्रुटि लॉग है: असीमित (वादे में) TypeError: अपरिभाषित की संपत्ति 'बनाना' नहीं पढ़ सकता – nutboltu

उत्तर

0

मैंने परीक्षण और त्रुटि विधि का पालन किया और ऑफ़लाइन एम्बेडेड मॉडल के समाधान के लिए आया है। पहले की तरह, मैंने केवल "सामान्य/मॉडल /" निर्देशिका में प्रोजेक्ट और प्रोजेक्टमेम्बर के बीच संबंधों को परिभाषित किया था। मुझे क्या लगता है, मुझे क्लाइंट साइड मॉडल में भी संबंधों को परिभाषित करना है। तो मैंने निम्नलिखित कदम उठाए और यह काम करता है।

  1. मैंने एक जेसन फ़ाइल - "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 
        } 
        } 
    } 
    } 
    

तो निष्कर्ष यदि आप ऑफ़लाइन पर अपने एम्बेडेड मॉडल काम चाहते हैं आप क्लाइंट साइड मॉडल में संबंधों को फिर से परिभाषित करने के लिए है है।

संबंधित मुद्दे