2016-01-06 25 views
5
में जाँच परिणाम

मैं धूल टेम्पलेट के साथ कनेक्ट-भूमिकाओं के संयोजन हूँ EJS टेम्पलेट इस वाक्यसमारोह कॉल और DustJs

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

की तरह कुछ और है कि जेड में है

if userCan('impersonate') 
    button#impersonate Impersonate 

में यह करने के लिए कैसे धूल?

  {@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} 

इस कोड को मुझे एक त्रुटि

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

संपादित करें: मैं इस {@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                                                              ", 

में है और ये मेरे नियंत्रक है

router.get('/', function (req, res) { 
    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); 
    } 
} 
    models.SPR_ASSET.findAll({ 
     include: [ models.SPR_TYPE_UM, models.SPR_TYPE_ASSETS, models.SPR_ASSETS_DS ] 
    }).then(function(assets) { 
     res.render('assets', { 
     title: 'Справочник спецификаций', 
     assets: assets 
     context: context 
     }); 
    }); 

var context यहाँ काम नहीं किया

उत्तर

4

धूल पता नहीं है कार्य हैं क्या। यह केवल "संदर्भ" के बारे में जानता है, जो आपके संदर्भ में कुंजी हैं।

यदि आपके संदर्भ में एक कुंजी एक फ़ंक्शन है, तो धूल फ़ंक्शन का आह्वान करेगा और परिणाम को इसके प्रतिपादन में उपयोग करेगा। इस तरह के कार्यों को संदर्भ सहायक कहा जाता है, और आप उनके बारे में in the documentation पढ़ सकते हैं। वैकल्पिक रूप से, आप सीधे धूल के साथ फ़ंक्शंस पंजीकृत कर सकते हैं जो कहीं भी सुलभ हैं - इन्हें वैश्विक सहायक के रूप में जाना जाता है।

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

और अपने खाके में:

तो userCan वैश्विक कनेक्ट-भूमिकाओं के उपलब्ध करता है कि किसी प्रकार का है, तो आप इस तरह एक वैश्विक सहायक में इसका इस्तेमाल कर सकता है

{@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} 

संपादित करें: ऐसा लगता है कि userCan अनुरोध-स्कॉप्ड है, इसलिए आप अनुरोध संदर्भ को अपने संदर्भ में जोड़कर इसका उपयोग कर सकते हैं। कुछ की तरह:

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} 

स्पष्ट है कि, वहाँ Dust-- में अपने खाके में सीधे एक समारोह आह्वान करने के लिए यह मनमाने ढंग से जे एस निष्पादन का समर्थन नहीं करता कोई तरीका है। पैरामीटर के साथ फ़ंक्शन का आह्वान करने के लिए, आपको एक सहायक प्रदान करना होगा जो फ़ंक्शन को आमंत्रित करता है ताकि यह पैराम को उस प्रारूप में बदल सके जो आपके फ़ंक्शन की अपेक्षा करता है।

+0

मेरे पास नियंत्रक में मेरे req ऑब्जेक्ट में userCan func है लेकिन मैंने इसे धूल सहायक में किसी भी पैरामीटर में नहीं देखा है, बस मैं धूल टेम्पलेट –

+0

से req.userCan ("कुछ") को कॉल नहीं कर सकता यदि 'userCan' है अनुरोध-स्कोप्ड, आपको इसके बजाय एक संदर्भ सहायक लिखना होगा और अनुरोध ऑब्जेक्ट को अपने संदर्भ में पास करना होगा। – Interrobang

+0

यह var संदर्भ राउटर में होना चाहिए? और इसे देखने के लिए पास? फिर (फ़ंक्शन (संपत्ति) { res.render ('संपत्ति', { शीर्षक: 'शीर्षक', संदर्भ: संदर्भ }); }); यह उस तरह से काम नहीं किया।और मुझे –

संबंधित मुद्दे