2013-03-06 3 views
1

Учитывая объект JSON:Итерация по свойствам текущего контекста объектов в Dust.js

errors = 
{ 
    hashed_password: { 
    message: 'Validator "Password cannot be blank" failed for path hashed_password', 
    name: 'ValidatorError', 
    path: 'hashed_password', 
    type: 'Password cannot be blank' }, 
    username: { 
    message: 'Validator "Username cannot be blank" failed for path username', 
    name: 'ValidatorError', 
    path: 'username', 
    type: 'Username cannot be blank' }, 
    email: { 
    message: 'Validator "Email cannot be blank" failed for path email', 
    name: 'ValidatorError', 
    path: 'email', 
    type: 'Email cannot be blank' }, 
    name: { 
    message: 'Validator "Name cannot be blank" failed for path name', 
    name: 'ValidatorError', 
    path: 'name', 
    type: 'Name cannot be blank' } 
} 

Как перебрать свойства каждого «текущего контекста» объект?

Я думаю, что вы делаете что-то вроде этого:

{#errors} 
    {#.} 
     {type} 
    {/.} 
{/errors} 
+0

Корневой вопрос: в каком порядке вы бы хотите, чтобы ваш выход находился? – spectras

ответ

0

Это не представляется возможным перебирать членов объекта в пыли. Отчасти причина в том, что вы не можете знать порядок членов. Другая часть состоит в том, что это рассматривается как введение слишком много логики в Пыль.

Вместо этого, вы можете изменить JSON, чтобы выглядеть следующим образом:

{ 
    errors: [ 
    { 
     hashed_password: { 
     message: 'Validator "Password cannot be blank" failed for path hashed_password', 
     name: 'ValidatorError', 
     path: 'hashed_password', 
     type: 'Password cannot be blank' 
     } 
    }, 
    { 
     username: { 
     message: 'Validator "Username cannot be blank" failed for path username', 
     name: 'ValidatorError', 
     path: 'username', 
     type: 'Username cannot be blank' 
     } 
    }, 
    { 
     email: { 
     message: 'Validator "Email cannot be blank" failed for path email', 
     name: 'ValidatorError', 
     path: 'email', 
     type: 'Email cannot be blank' 
     } 
    }, 
    { 
     name: { 
     message: 'Validator "Name cannot be blank" failed for path name', 
     name: 'ValidatorError', 
     path: 'name', 
     type: 'Name cannot be blank' 
    } 
    ] 
} 
+0

Это действительно разочаровывает ха-ха. –

+0

Можете ли вы разместить фрагмент наиболее эффективного способа делать то, что я пытаюсь сделать? –

0

Вы можете перебирать объект с помощью помощника.

Например, вы могли бы определить помощника, как этот:

dust.helpers.iter = function(chunk, context, bodies, params) { 
    var obj = dust.helpers.tap(params.obj, chunk, context); 

    var iterable = []; 

    for (var key in obj) { 
    if (obj.hasOwnProperty(key)) { 
     var value = obj[key]; 

     iterable.push({ 
     '$key': key, 
     '$value': value, 
     '$type': typeof value 
     }); 
    } 
    } 

    return chunk.section(iterable, context, bodies); 
}; 

Затем, в шаблоне, вы бы перебрать так:

{@iter obj=errors} 
    {$value.type} 
{/iter} 
+0

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