2016-10-03 19 views
0

どういうわけか、工場データからコントローラにデータを取得できません。私は、JavaScriptのリモーティングを使用していますが、工場は工場からコントローラへデータを転送

function userRecordFetchFactory($rootScope) { 
     var custRec = {}; 
      return {           
       checkRecordType : function(urlObject) { 
       function loadRecordType(err, records, event) { 
         if (err) { 
          displayReadingInformationErrorView(); 
         } else if (records != null && records.length == 0) { 
          displayReadingInformationErrorView(); 
         } else { 
          custRec = { 
           Name : records[0].get('Name'), 
           lat : records[0].get('Latitude__c'), 
           lon : records[0].get('Longitude__c'), 
           SiteStreet : records[0] 
             .get('SiteStreet__c'), 
           SiteCity : records[0].get('SiteCity__c'), 
           SiteCountryCode : records[0] 
             .get('SiteCountryCode__c'), 
           SitePostalCode : records[0] 
             .get('SitePostalCode__c'), 
           AddressID : records[0].get('AddressID__c'), 
           loaded : true 
          }; 

         } 
        } 
        if (urlObject && urlObject.aid 
          && urlObject.aid.startsWith(accPrefix)) { 
         objModel = new RemoteObjectModel.Account(); 
        } 
        if (urlObject && urlObject.aid 
          && urlObject.aid.startsWith(leadPrefix)) { 
         objModel = new RemoteObjectModel.Lead(); 
        } 

        if (objModel) { 
         objModel.retrieve({ 
          where : { 
           Id : { 
            eq : urlObject.aid 
           } 
          } 
         }, loadRecordType); 
        } 

        return custRec; 
       } 
      }; 
     } 

の下に与えられていると私のコントローラは、データ

function LocatorInitController($document, $scope, 
       userRecordFetchFactory) { 
       console.log("inside the controller"+urlParams); 
       $scope.CustomerSite = {}; 
       userRecordFetchFactory.checkRecordType(urlParams) 
       .then(function successData(data){ 
       $scope.CustomerSite = data.data; 
       execGeoCoding(); 
       }); 

私は未定義のプロパティの成功を読み取ることができないエラーを取得するにアクセスするには以下の通りです。ファクトリでは、メソッドcheckRecordTypeには、javascriptリモート呼び出しであるretrieve関数があり、finctionにはloadrecordtypeへのコールバックがあります。

答えて

0

なぜあなたはそうのようなあなたの工場を書き換えてみません:あなたは工場出荷時のオブジェクトに間違った道を戻っているよう

function Factory() { 
var custRec = { 

    subscribe: function(scope, callback) { 
     var handler = $rootScope.$on(
      'fire-event-accountservice-retrieve', 
      function(
       event, data) { 
       callback(data); 
       scope.$apply(); 
      }); 
     scope.$on('$destroy', handler); 
    }, 
    checkRecordType: function(urlObject) { 
     var custRec; 
     if (urlObject.aid == null && urlObject.addr == null) { 
      displayCurrentLocation(); 
     } 
     if (urlObject && urlObject.aid && 
      urlObject.aid.startsWith(accPrefix)) { 
      objModel = new RemoteObjectModel.Account(); 
     } 
     if (urlObject && urlObject.aid && 
      urlObject.aid.startsWith(leadPrefix)) { 
      objModel = new RemoteObjectModel.Lead(); 
     } 
     if (objModel == null && urlObject.aid != null && urlObject.addr == null) { 
      displayReadingInformationErrorView(); 
     } 
     if (objModel) { 
      objModel.retrieve({ 
       where: { 
        Id: { 
         eq: urlObject.aid 
        } 
       } 
      }, loadRecordType); 
     } else if ((urlObject.addr != null || urlObject.addr != '') && (typeof urlObject.addr != "undefined")) { 
      displayLocationBasedOnAddress(urlObject.addr); 
     } 

     function loadRecordType(err, records, event) { 
      if (err) { 
       displayReadingInformationErrorView(); 
      } else if (records != null && records.length == 0) { 
       displayReadingInformationErrorView(); 
      } else { 
       custRec = { 
        Name: records[0].get('Name'), 
        lat: records[0].get('Latitude__c'), 
        lon: records[0].get('Longitude__c'), 
        SiteStreet: records[0] 
         .get('SiteStreet__c'), 
        SiteCity: records[0].get('SiteCity__c'), 
        SiteCountryCode: records[0] 
         .get('SiteCountryCode__c'), 
        SitePostalCode: records[0] 
         .get('SitePostalCode__c'), 
        AddressID: records[0].get('AddressID__c'), 
        loaded: true 
       }; 

       /* $rootScope.$emit(
          'fire-event-accountservice-retrieve', 
          custRec); */ 
      } 
     } 

    } 
} 
return custRec; 
} 

が見えます。

+0

私のエラーはuserRecordFetchFactory.checkRecordType(...)と言っています。次に関数ではありません –

+0

.thenは、クライアントが約束を期待していることを意味します。 checkRecordTypeの概要からは、約束が返されているようには見えません。 – westandy

1

簡単な方法で工場にお書きいただくことをお勧めします。すべてのあなたのネスティングが参照

// pass functions as references to object properties 
// can easily see the whole factory object at top of the file 
var custRec = { 
    checkRecordType : checkRecordType, 
    subscribe  : subscribe  
}; 

return custRec; 


// move function declarations to the bottom and out of the way 

function checkRecordType(){ 
    /// do stuff 
    return stuff; 
} 

function loadRecordType(err, records, event) { 
    /// do stuff 
    return stuff; 
} 

function subscribe(scope, callback){ 
    /// do stuff 
    return stuff; 
} 

簡単

入れてアクセス可能なすべてのメンバーまでトップ全体のことを見ていないあなたを引き起こしている私は、コードをリファクタリングし、今.then入れて大丈夫John Papa Angular STyle Guide

+0

loadRecordTypeはcheckRecordTypeから外れることはできません。さらに、不要なので、購読機能を削除することができます。それでもコントローラにデータを取得するのに問題があります。 –

+0

ですが、どうしてですか?また、スコープをサービスに渡さないでください。 – charlietfl

+0

loadRecordTypeは、javascriptリモーティングを使用してsalesforceでデータを取得する方法です。したがって、loadRecordTypeを呼び出すcheckRecordTypeのRetrieve関数を調べると、したがって、チェックレコーダタイプ –

0
function userRecordFetchFactory($rootScope) { 
var custRec = {}; 

    custRec.checkRecordType = function (urlObject) { 
     function loadRecordType(err, records, event) { 
      if (err) { 
       displayReadingInformationErrorView(); 
      } else if (records != null && records.length == 0) { 
       displayReadingInformationErrorView(); 
      } else { 
       custRec = { 
        Name: records[0].get('Name'), 
        lat: records[0].get('Latitude__c'), 
        lon: records[0].get('Longitude__c'), 
        SiteStreet: records[0] 
         .get('SiteStreet__c'), 
        SiteCity: records[0].get('SiteCity__c'), 
        SiteCountryCode: records[0] 
         .get('SiteCountryCode__c'), 
        SitePostalCode: records[0] 
         .get('SitePostalCode__c'), 
        AddressID: records[0].get('AddressID__c'), 
        loaded: true 
       }; 

      } 
     } 
     if (urlObject && urlObject.aid 
      && urlObject.aid.startsWith(accPrefix)) { 
      objModel = new RemoteObjectModel.Account(); 
     } 
     if (urlObject && urlObject.aid 
      && urlObject.aid.startsWith(leadPrefix)) { 
      objModel = new RemoteObjectModel.Lead(); 
     } 

     if (objModel) { 
      objModel.retrieve({ 
       where: { 
        Id: { 
         eq: urlObject.aid 
        } 
       } 
      }, 
return custRec; 
} 
関連する問題