0

meteor/blazeのテーブルをcsvにエクスポートするのが難しいです。私は次のとおりです:[http://rafaelquintanilha.com/export-your-json-data-to-csv-format/][1]テーブル値のエクスポートMeteor Blaze

私はそれがグローバルヘルパー

MyAppExporter = { 
    exportAllContacts: function() { 
     var self = this; 
     Meteor.call("exportContacts", function(error, data) { 
      if (error) { 
       alert(error); 
       return false; 
      } 
      var csv = Papa.unparse(data); 
      self._downloadCSV(csv); 
     }); 
    }, 
    _downloadCSV: function(csv) { 
     var blob = new Blob([csv]); 
     var a = window.document.createElement("a"); 
     a.href = window.URL.createObjectURL(blob, {type: "text/plain"}); 
     a.download = "contacts.csv"; 
     document.body.appendChild(a); 
     a.click(); 
     document.body.removeChild(a); 
    } 
} 

中)(exportAllContactsを呼び出していると、ヘルパーはMeteor.method exportContactsを呼び出しているエクスポートボタン

Template.export.onCreated(() => { 
    Template.instance().subscribe('table'); 
}); 
Template.export.helpers({ 
    exportContacts() { 
    return Contacts.find(); 
    } 
}); 
Template.export.events({ 
    'click .export-data'() { 
    MyAppExporter.exportAllContacts(); 
    } 
}); 

をトリガされTemplate.eventを持っています

Meteor.methods({ 
    exportContacts: function() { 
     let fields = [ 
      "Email", 
      “Some Contact", 
      "Created Date", 
      "Hard Bounce", 
      "Unsubscribed" 
     ]; 
     let data = []; 
     let contacts = Contacts.find().fetch(); 
    for(let i = 0; i < contacts.length; i++) { 
     let contact = contacts[i]; 
     let contactString = JSON.stringify(contact); 
     _.each(contactString, function(c) { 
     console.log("Inside Loop", contactString); 
      data.push([ 
       c.contact.emailAddress, 
       c.contact.someContact, 
       c.contact.creationDate, 
       c.contact.hardBounceBack, 
       c.contact.unsubscribed 
      ]); 
     console.log("DATA", data) 
     return {fields: fields, data: data}; 
     }); 
    } 
    } 
}); 

私はEMAILADDRESSが元に定義されていません」というエラーを取得維持しますportContacts.js:20:17

20160426-22:00:47.957(-4)? Inside Loop {"_id":"dRnXRdZrbR9CYdmBx","contact":[{"emailAddress":"[email protected]","someContact":"No","creationDate":"N/A","hardBounceBack":"N/A","unsubscribed":"N/A"}]} 

I20160426-22:00:48.029(-4)? Exception while invoking method 'exportContacts' ReferenceError: emailAddress is not defined 
I20160426-22:00:48.029(-4)?  at server/methods/exportContacts.js:20:17 
I20160426-22:00:48.029(-4)?  at Function._.each._.forEach (packages/underscore.js:142:22) 
I20160426-22:00:48.029(-4)?  at _loop (server/methods/exportContacts.js:17:7) 

しかし、私は連絡先にアクセスする方法を理解できないようです。私はそれをログアウトしています(上のログを参照)。どんな助けもありがとう。

追加ログ let contacts = contacts.find(); fetch(); _.each(contactString, function(c) {

読み込みする必要があります:_.each(contact, function(c) {

にconsole.log(連絡先)は

I20160427-09:06:23.484(-4)? CONTACTS [ { _id: 'dRnXRdZrbR9CYdmBx', contact: [ [Object] ] }, 
I20160427-09:06:23.484(-4)? { _id: 'LHmW4R9PLM5D7cZxr', contact: [ [Object] ] }, 
I20160427-09:06:23.484(-4)? { _id: 'jBdqQXz2b8itXJowX', contact: [ [Object] ] }, 
I20160427-09:06:23.484(-4)? { _id: 'bnDvNGX3i879z4wr2', contact: [ [Object] ] } ] 

c.contact [0] .emailAddressはあなたの問題は、このラインである

I20160427-09:22:08.142(-4)? Inside Loop {"_id":"dRnXRdZrbR9CYdmBx","contact":[{"emailAddress":"[email protected]","someContact":"No","creationDate":"N/A","hardBounceBack":"N/A","unsubscribed":"N/A"}]} 
I20160427-09:22:08.217(-4)? Exception while invoking method 'exportContacts' TypeError: Cannot read property '0' of undefined 
I20160427-09:22:08.217(-4)?  at server/methods/exportContacts.js:21:7 
I20160427-09:22:08.217(-4)?  at Function._.each._.forEach (packages/underscore.js:142:22) 
I20160427-09:22:08.217(-4)?  at _loop (server/methods/exportContacts.js:18:7) 
I20160427-09:22:08.218(-4)?  at [object Object].exportContacts (server/methods/exportContacts.js:15:46) 
+0

質問の[編集]リンクを使用して、 'let contacts = Contacts.find()。fetch();で取得した結果のサンプル文書をいくつか含めることができます。 console.log(連絡先) '?単なる検査では、 'c.contact'は配列であり、配列からプロパティにアクセスしようとしているため、エラーです。 'c.contact [0] .emailAddress'も試してみることができますか? – chridam

+0

chridamのログを追加しました –

答えて

0

_.eachループの中で、あなたはwronにアクセスしていますg個のデータ項目。外側forループの代わりに_.eachループを使用することもできます。次の場合:

let contacts = Contacts.find().fetch(); 
_.each(contacts, function(contact) { 
    _each(contact.contact, function(c) { 
     data.push(
      { 
       "email": c.emailAddress, 
       "contact": c. someContact, 
       "creationDate" : c.creationDate, 
       "bounceBack": c.hardBounceBack, 
       "unsubscribed": c.unsubscribed 
      }    
    }) 
}) 

これは問題を解決するはずです。この方法では、フェッチから戻ってきた外側の連絡先をループし、各要素から連絡先配列をループします。これは、探しているデータに到達する最も直接的な方法でなければなりません。

関連する問題