2016-08-27 2 views
0

-jade Der Versuch, ein json Objekt mit nested object, Aber each prod in order.productOrder nicht prod.name yeild ...Jade verschachteltes Objekt in json wird angezeigt, nicht

JSON

{ 
   "id": "57bf5800473ffcd9bec12845", 
   "userId": "57988bf249c8791e403ea6f0", 
   "paymentTrans": { 
      "trandId": 6720391068199, 
      "timestampApproved": "Sat Aug 27 2016 19:48:29 GMT+0300 (IDT)", 
      "timestampSent": "Sat Aug 27 2016 19:48:29 GMT+0300 (IDT)", 
      "serviceName": "PayPal" 
   }, 
   "totalPerOrder": 160, 
   "productOrder": [ 
      { 
         "total": 40, 
         "price": 4, 
         "quantity": 10, 
         "name": "Banana", 
         "sku": "BAN" 
      }, 
      { 
         "total": 120, 
         "price": 10, 
         "quantity": 12, 
         "name": "Fig", 
         "sku": "FIG" 
      } 
   ] 
} 

Jade

tbody 
    each order in orders 
     tr 
      td.tdRight= moment(order.paymentTrans.timestampSent).format('DD.MM.YYY') 
      td.tdCenter.price= order.totalPerOrder 
      td.tdLeft= order.paymentTrans.serviceName 
      td.tdCenter 
       button.btn.product.btn-primary(type='button', ng-click='showDetails()') 

     each prod in order.productOrder 
      tr.show.hidden 
       td.tdRight= prod.name 
       td.tdCenter= prod.price 
       td.tdCenter= prod.quantity 
       td.tdLeft= prod.total 
     br 

Chrom

> 20|        td.tdRight= prod.name 
    21|        td.tdCenter= prod.price 
    22|        td.tdCenter= prod.quantity 
    23|        td.tdLeft= prod.total 
Cannot read property 'name' of undefined 

den Code hier jade-demo versucht und es worx ....

Jade Eingang

doctype html 
html(lang="en") 
    head 
    title= pageTitle 
    script(type='text/javascript'). 
     if (foo) { 
     bar(1 + 5) 
     } 
    block content 
    .page-header 
     h3 ההזמנות שלי 
     table.table.table-bordered 
      thead 
       tr פירוט הזמנות 
      tbody 
       each order in orders 
        tr 
         td.tdRight= order.paymentTrans.timestampSent 
         td.tdCenter.price= order.totalPerOrder 
         td.tdLeft= order.paymentTrans.serviceName 
         td.tdCenter 
          button.btn.product.btn-primary(type='button', ng-click='showDetails()') 
        for prod in order.productOrder 
         tr.show.hidden 
          td.tdRight= prod.name 
          td.tdCenter= prod.price 
          td.tdCenter= prod.quantity 
          td.tdLeft= prod.total 
        br 

Einheimische

{ 
    orders: [ 
{ 
   "id": "57bf5800473ffcd9bec12845", 
   "userId": "57988bf249c8791e403ea6f0", 
   "paymentTrans": { 
      "trandId": 6720391068199, 
      "timestampApproved": "Sat Aug 27 2016 19:48:29 GMT+0300 (IDT)", 
      "timestampSent": "Sat Aug 27 2016 19:48:29 GMT+0300 (IDT)", 
      "serviceName": "PayPal" 
   }, 
   "totalPerOrder": 160, 
   "productOrder": [ 
      { 
         "total": 40, 
         "price": 4, 
         "quantity": 10, 
         "name": "Banana", 
         "sku": "BAN" 
      }, 
      { 
         "total": 120, 
         "price": 10, 
         "quantity": 12, 
         "name": "Fig", 
         "sku": "FIG" 
      } 
   ] 
}, 
{ 
"id": "57bf5800473ffcd9bec12845", 
"userId": "57988bf249c8791e403ea6f0", 
"paymentTrans": { 
    "trandId": 6720391068199, 
    "timestampApproved": "Sat Aug 27 2016 19:48:29 GMT+0300 (IDT)", 
    "timestampSent": "Sat Aug 27 2016 19:48:29 GMT+0300 (IDT)", 
    "serviceName": "PayPal" 
}, 
"totalPerOrder": 160, 
"productOrder": [ 
    { 
     "total": 40, 
     "price": 4, 
     "quantity": 10, 
     "name": "Banana", 
     "sku": "BAN" 
    }, 
    { 
     "total": 120, 
     "price": 10, 
     "quantity": 12, 
     "name": "Fig", 
     "sku": "FIG" 
    } 
] 
} 
    ] 
} 

UPDATE 1

td.tdCenter= order.productOrder 

gibt:

[ { sku: 'APL', name: 'Apple', quantity: 2, price: 12, total: 24 }, { sku: 'AVC', name: 'Avocado', quantity: 2, price: 16, total: 32 } ] 

in td.

mongodb

"productOrder" : [ { "sku" : "APL" , "name" : "Apple" , "quantity" : 2 , "price" : 12 , "total" : 24} , { "sku" : "AVC" , "name" : "Avocado" , "quantity" : 2 , "price" : 16 , "total" : 32}] 

WebStorm Momentaufnahme der Konsole und MongoDB webStorm snapshot of console and mongodb

Bestellungen Screenshot mit uniteratable order.productOrder Daten habe ich nur noch eine td Linie so: td.tdCenter= order.productOrder Orders Screenshot with missing data

UPDATE 2 - order.js-Controller

exports.getOrders = (req, res) => { 

    Order.find() 
     .populate({ 
      path: 'orders', 
      match: { _id: req.user._id } 
     }) 
     .exec(function (err, orders) { 
      orders.forEach(function(elem){ 
       console.log("ELEM = " + elem.productOrder); 
       console.log("ELEM = " + typeof elem.productOrder); 
      }); 

      res.render('account/orders', { 
       title: 'ניהול ההזמנות שלי', 
       angularApp: 'storeApp', 
       orders: orders 
      }); 
     }); 
}; 

Console Schnappschuss order.js

console.log("ELEM = " + elem.productOrder); enter image description here

Wie ich dieses Problem beheben kann ??

+0

Die JSON Sie ist aus dem Array anders zeigt, die in der "UPDATE" gezeigt. Scheitert Ihr Code tatsächlich mit dem JSON, den Sie posten ("Banana" und "Fig")? – robertklep

+0

@robertklep, nur verschiedene Mockup-Daten, die ich benutze ... der Code versagt, und mehr: 'jeder prod in order.ProductOrder.length? order.productOrder: ['empty'] 'gibt' empty' zurück ... – Jadeye

+0

Ich kann das Problem nicht reproduzieren, es funktioniert gut für mich. Siehe [diese Beschreibung] (https://gist.github.com/robertklep/b7bda8efc7249d44fd839c914a32165e) für die Ausgabe, die generiert wird. – robertklep

Antwort

0

In erster Linie muss ich @robertklep für die Persistenz & Führung danken ...
Unglaublich ..... 3 dayz ...für diese Auflösung:

order.js-Controller

Order.find().lean() 
     .populate({ 

Die Abfrage benötigt, um die lean() mongooose Funktion, um Ebene zurückzukehren javascript objects dass jade in each & for Schleifen der verschachtelten Objekten analysieren konnte, so:

jade

each order in orders 
    tr 
     td.tdRight= moment(order.paymentTrans.timestampSent).format('DD.MM.YYY') 
     td.tdCenter.price= order.totalPerOrder 
     td.tdLeft= order.paymentTrans.serviceName 
     td.tdCenter 
      button.btn.product.btn-primary(type='button', ng-click='showDetails()') 
       | פירוט 
    tr 
     td.tdRight= 'name' 
     td.tdCenter= 'price' 
     td.tdCenter= 'quantity' 
     td.tdLeft= 'total' 
    for prod in order.productOrder 
     tr 
      td.tdRight= prod.name 
      td.tdCenter= prod.price 
      td.tdCenter= prod.quantity 
      td.tdLeft= prod.total 

Ausgang chrome snapshoot Credit

ecdeveloper's OS anser on Convert Mongoose docs to json

Verwandte Themen