2016-04-28 9 views
0

У меня есть помощник Dust.js где я применить некоторые аКЛ логику следующим образом:Dust.js Шаблон пользовательского Helper в Bootstrap непоследовательность

'use strict'; 

import dust from 'dustjs-linkedin'; 
import acl from '../config/acl'; 

dust.helpers.accessControl = function(chunk, context, bodies, params) { 
    let userId = params.userId; 
    let resource = params.resource; 
    let permission = params.permission; 

    acl.acl.isAllowed(userId, resource, permission, function(err, res){ 

     if(res){ 
      chunk.render(bodies.block, context); 
      return chunk; 
     } 
     else { 
      return chunk; 
     } 
    }); 
}; 

В шаблоне:

{@accessControl userId=user._id resource="/admin" permission="get"} 
        <li class="nav-item"> 
         <a class="nav-link" ng-class="{'active' : getPath()[0] == 'admin'}" href="/admin">Admin</a> 
        </li> 
       {/accessControl} 

Помощники получает правильно заданы правильные параметры, а node_acl правильно разрешает пользователю (res в обратном вызове - true). Во многих местах в пределах своих шаблонов, он отображает предполагаемое поведение, для Bootstrap 3 навигационной панели, где он обычно не делает ничего, кроме, а иногда и ниже ул в навигационной панели:

Below the navbar

Любые мысли? Обратите внимание, что я использую Angular для размещения активного класса в ссылках, это не SPA, и глубокая привязка отключена, но ему нечего делать, поскольку шаблоны визуализируются на стороне сервера. Благодаря!

ответ

0

Запросы node_acl являются асинхронными. Мне нужно было сменить помощника на:

dust.helpers.accessControl = function(chunk, context, bodies, params) { 
    let userId = params.userId; 
    let resource = params.resource; 
    let permission = params.permission; 

    return chunk.map(function(chunk) { 
     acl.acl.isAllowed(userId, _reverse(resource), permission, function(err, res){ 
      if(res && bodies['block']) { 
       return chunk.render(bodies['block'], context).end(); 
      } 
      else { 
       return chunk; 
      } 
     }); 
    }); 
}; 

, чтобы преодолеть фрагменты не по порядку.

 Смежные вопросы

  • Нет связанных вопросов^_^