2016-01-06 18 views
5
kontrol sonuçları

Ben ejs şablon yeşim bu sözdizimiFonksiyon çağrısı ve DustJs

<% if (userCan('impersonate')) { %> 
    <button id="impersonate">Impersonate</button> 
<% } %> 

gibi bir şey ve buna sahip toz şablonla bağlamak-rollerini birleştirerek am

if userCan('impersonate') 
    button#impersonate Impersonate 

bunu nasıl toz?

  {@eq key=userCan('edit data') value="true" } 
       <td><a href='/assets/edit/{.ID_ASSET}'>Edit</a></td> 
       <td><a href='/assets/delete/{.ID_ASSET}'>Delete</a></td> 
      {:else} 

      {/eq} 

Bu kod

Wed, 06 Jan 2016 16:57:47 GMT uncaughtException Expected end tag for assets but it was not found. At line : 42, column : 13 

Düzenleme bana bir hata

olsun: Ben {@contextDump key="full"/}

"tail": {}, 
    "isObject": true, 
    "head": { 
    "enrouten": { 
     "routes": {}, 
     "path": "function path(name, data) {var route;route = this.routes[name];if (typeof route === 'string') {return path2regexp.compile(route)(data);}return undefined;}" 
    }, 
    "userIs": "function (action) {var act = ert(req, action);return roles.test(req, act)}", 
    "userCan": "function (action) {var act = ert(req, action);return roles.test(req, act)}", 
    "isAuthenticated": "function() { [native code] }", 
    "_csrf": "FSaqN0PWxOF4slTUfnGHXJ0NkPOTJFl0u57eM=", 
    "title": "Справочник спецификаций", 
    "assets": [ 
     { 
     "ID_ASSET": 1, 
     "SYMBOL_KODE": "12.TR.18", 
     "DOK_NAME": "ТХ9042", 
     "DESCRIPTION": "Контроллер программируемый ТХ9042", 
     "DATE_RELISE": "2001-10-04T21:00:00.000Z", 
     "POS_KODE": "pos kode 1                                                              ", 

bu var Ve bu benim denetleyicisi olan

burada fonksiyonları bilmiyor

cevap

4

Dust çalışmadı. Sadece içeriğinizdeki anahtarlar olan "referanslar" ı bilir.

İçeriğinizdeki bir anahtar bir işlevse, Toz işlevi çağırır ve sonucu oluşturma işleminde kullanır. Bu işlevler içerik yardımcıları olarak adlandırılır ve bunlar hakkında in the documentation okuyabilirsiniz. Alternatif olarak, fonksiyonları herhangi bir yerde erişilebilir olan Tozla doğrudan kaydedebilirsiniz; bunlar, global yardımcılar olarak adlandırılır.

dust.helpers.userCan = function(chunk, context, bodies, params) { 
    var permission = context.resolve(params.permission); 
    return userCan(permission); 
} 

Ve şablonunda:

userCan Eğer bağlantı-rolleri kullanılabilir hale getirdiğini küresel bir tür, böyle bir küresel yardımcı bunun faydalanmak olabilir

{@userCan permission="edit data"} 
    <td><a href='/assets/edit/{.ID_ASSET}'>Edit</a></td> 
    <td><a href='/assets/delete/{.ID_ASSET}'>Delete</a></td> 
{:else} 
    Please log in. 
{/userCan} 

Düzenleme: userCan istek kapsamı gibi görünüyor, bu nedenle isteğinizi içeriğinize ekleyerek kullanabilirsiniz. Bir şey gibi:

var context = { 
    req: req, // from Express callback 
    userCan: function(chunk, context, bodies, params) { 
    var permission = context.resolve(params.permission); 
    return context.get('req').userCan(permission); 
    } 
} 

{#userCan permission="edit data"} 
    <td><a href='/assets/edit/{.ID_ASSET}'>Edit</a></td> 
    <td><a href='/assets/delete/{.ID_ASSET}'>Delete</a></td> 
{:else} 
    Please log in. 
{/userCan} 

Açık olmak gerekirse, bu sallama JS yürütme desteklemediği Dust-- daki şablonunda doğrudan bir işlevi çağırmak için hiçbir yöntem yoktur. Parametrelerle bir işlevi çağırmak için, işlevi çağırmaya yardımcı olan bir yardımcı sağlamanız gerekir, böylece paramları işlevinizin beklediği biçimde dönüştürebilir.

+0

Denetleyicideki req nesnesinde kullaniciKan func var ancak toz yardımcısında herhangi bir parametrede görmedim, sadece toz şablonundan req.userCan ("bir şey") arayamıyorum –

+0

"userCan" ise istek-kapsamı, bunun yerine bir içerik yardımcısı yazmanız ve istek nesnesini içeriğinize iletmeniz gerekir. – Interrobang

+0

Bu var bağlam yönlendirici olmalıdır? ve görüntülemek için geçmek? sonra (işlev (varlıklar) { res.render ('asset', { title: 'Title', içerik: context }); }); Bu şekilde çalışmadı.Ve ben görünümde req alamıyorum –