2013-09-13 8 views
1

Проблема с jade и loop бросила массив из запроса mysql. когда я console.log строка, которую я пытаюсь занести в журнал, выгружает это.jade inested looping mysql array

Что хорошего.

Теперь я пытаюсь настроить его, чтобы нефрит автоматически заполнил имена столбцов и столбцы. Так или иначе, вот мой нефритовый код.

block content 
    .container 
    h1 Data Tables  
    .span12 
    table.table.table-striped.table-bordered.table-condensed 
     thead 
     each f in fields 
      th= f.name 
     tbody 
     each i in results 
      tr 
      each b in i 
       td= b 

Видимо я не могу отправить фото из-за этого будучи мой первый пост, поэтому я буду стараться копировать и вставлять, как могу.

Вместо того, чтобы останавливаться на }, это происходит следующим образом в двух новых столбцах.

enter image description here

function (parser, fieldPackets, typeCast, nestTables, connection) { 
    var self = this; 
    var next = function() { 
    return self._typeCast(fieldPacket, parser, connection.config.timezone, connection.config.supportBigNumbers, connection.config.bigNumberStrings); 
    }; 
    for (var i = 0; i < fieldPackets.length; i++) { 
    var fieldPacket = fieldPackets[i]; 
    var value; 
    if (typeof typeCast == "function") { 
     value = typeCast.apply(connection, [new Field({ 
     packet: fieldPacket, 
     parser: parser 
     }), next]); 
    } else { 
     value = (typeCast) ? this._typeCast(fieldPacket, parser, connection.config.timezone, connection.config.supportBigNumbers, connection.config.bigNumberStrings) : ((fieldPacket.charsetNr === Charsets.BINARY) ? parser.parseLengthCodedBuffer() : parser.parseLengthCodedString()); 
    } if (typeof nestTables == "string" && nestTables.length) { 
     this[fieldPacket.table + nestTables + fieldPacket.name] = value; 
    } else if (nestTables) { 
     this[fieldPacket.table] = this[fieldPacket.table] || {}; 
     this[fieldPacket.table][fieldPacket.name] = value; 
    } else { 
     this[fieldPacket.name] = value; 
    } 
    } 
} 

function (field, parser, timeZone, supportBigNumbers, bigNumberStrings) { 
    var numberString; 
    switch (field.type) { 
    case Types.TIMESTAMP: 
    case Types.DATE: 
    case Types.DATETIME: 
    case Types.NEWDATE: 
    var dateString = parser.parseLengthCodedString(); 
    var dt; 
    if (dateString === null) { 
     return null; 
    } 
    if (timeZone != 'local') { 
     if (field.type === Types.DATE) { 
     dateString += ' 00:00:00 ' + timeZone; 
     } else { 
     dateString += ' ' + timeZone; 
     } 
    } 
    dt = new Date(dateString); 
    if (isNaN(dt.getTime())) { 
     return dateString; 
    } 
    return dt; 
    case Types.TINY: 
    case Types.SHORT: 
    case Types.LONG: 
    case Types.INT24: 
    case Types.YEAR: 
    case Types.FLOAT: 
    case Types.DOUBLE: 
    numberString = parser.parseLengthCodedString(); 
    return (numberString === null || (field.zeroFill && numberString[0] == "0")) ? numberString : Number(numberString); 
    case Types.NEWDECIMAL: 
    case Types.LONGLONG: 
    numberString = parser.parseLengthCodedString(); 
    return (numberString === null || (field.zeroFill && numberString[0] == "0")) ? numberString : ((supportBigNumbers && (bigNumberStrings || (Number(numberString) > IEEE_754_BINARY_64_PRECISION))) ? numberString : Number(numberString)); 
    case Types.BIT: 
    return parser.parseLengthCodedBuffer(); 
    case Types.STRING: 
    case Types.VAR_STRING: 
    case Types.TINY_BLOB: 
    case Types.MEDIUM_BLOB: 
    case Types.LONG_BLOB: 
    case Types.BLOB: 
    return (field.charsetNr === Charsets.BINARY) ? parser.parseLengthCodedBuffer() : parser.parseLengthCodedString(); 
    case Types.GEOMETRY: 
    return parser.parseGeometryValue(); 
    default: 
    return parser.parseLengthCodedString(); 
    } 
} 

ответ

0

Если мы просто глядя на JADE-код, то это может помочь. я решил аналогичную progrem вроде этого:

- each value, i in results 
    tr 
    - var count = 0 
     - each b in i 
      - if(count < Object.keys(value).length) 
       td= b 
      - count += 1 

Я изменил имя своих собственных переменных, так что может поместиться в вашем файле JADE.

Будем надеяться, что пример кода говорит само за себя, но и объяснить, как это работает короче:

Прежде переменной «значение» получит каждый элемент в массиве «результаты», даже если это JSON объект с только разными значениями ключа.

Впоследствии я сделал переменную, которая подсчитывает количество ключей. Если у вас нет проверки против Object.keys (element) .length), тогда он будет печатать еще 2 значения, которые являются значениями «parse» и «_typeCast».

В любом случае эта переменная count просто подсчитывает количество используемых ключей, которое в дальнейшем сравнивается с количеством всех ключей в массиве JSON, когда все клавиши печатаются, а затем больше не печатаются.

Надеюсь, это поможет вам (или кому-то еще!)