【问题标题】:Export table values Meteor Blaze导出表值 Meteor Blaze
【发布时间】:2016-04-28 00:04:19
【问题描述】:

我在流星/火焰中将表格导出到 csv 时遇到了一些困难。我正在关注:[http://rafaelquintanilha.com/export-your-json-data-to-csv-format/][1]

我有一个触发导出按钮的 Template.event

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

它在全局帮助器中调用 exportAllContacts()

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

并且助手正在调用 Meteor.method exportContacts

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

我不断收到错误消息“未定义电子邮件地址 exportContacts.js:20:17

20160426-22:00:47.957(-4)? Inside Loop {"_id":"dRnXRdZrbR9CYdmBx","contact":[{"emailAddress":"fred@weasly.com","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)

但我似乎无法弄清楚如何访问联系人。我正在将其注销(请参阅上面的日志)。任何帮助将不胜感激。

添加的日志 让联系人 = Contacts.find().fetch(); 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":"fred@weasly.com","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)

【问题讨论】:

  • 您能否在您的问题中使用edit 链接来包含您使用let contacts = Contacts.find().fetch(); console.log(contacts) 获得的结果中的一些示例文档?仅从检查来看,c.contact 是一个数组,您正试图从数组中访问属性,因此出现错误。你也可以试试c.contact[0].emailAddress
  • 我为你添加了日志

标签: javascript mongodb meteor multidimensional-array meteor-blaze


【解决方案1】:

在 _.each 循环中,您正在访问错误的数据项。您也可以使用 _.each 循环而不是外部 for 循环。如果你这样做:

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

这应该可以解决您的问题。这样,您将遍历从 fetch 返回的外部联系人,然后遍历每个元素的联系人数组。这应该是获取您正在寻找的数据的最直接方法。

【讨论】:

    【解决方案2】:

    你的问题是这一行:_.each(contactString, function(c) {

    应该是:_.each(contact, function(c) {

    :)

    【讨论】:

      猜你喜欢
      • 2017-11-29
      • 1970-01-01
      • 2017-07-09
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 2021-07-28
      • 2016-03-10
      相关资源
      最近更新 更多