2013-02-09 14 views
5

अपडेट किया गया है तो वर्तमान यूज़र पुन: प्रस्तुत करने में सामग्री को लपेटा गया है, मैं उल्का का उपयोग कर रहा हूं और एक समस्या है जहां मेरी सामग्री को फिर से प्रस्तुत किया जा रहा है जब मैं इसे नहीं चाहता हूं।जब उपयोगकर्ता

मेरी मुख्य सामग्री currentUser में लिपटे है यदि मुझे लगता है कि कथन जो काफी मानक है।

{{#if currentUser}} 
    {{> content}} 
{{/if}} 

इस समस्या के साथ मेरी सामग्री टेम्पलेट को फिर से प्रस्तुत किया जा रहा है जब मैं अपना उपयोगकर्ता ऑब्जेक्ट अपडेट करता हूं। क्या इसके आसपास कोई रास्ता है? मैं सामग्री टेम्पलेट के अंदर कहीं भी उपयोगकर्ताओं का संदर्भ नहीं देता हूं।

धन्यवाद!

यहाँ मेरी समस्या को दोहराने के लिए एक नमूना अनुप्रयोग है:

एचटीएमएल

<head> 
    <title>Render Test</title> 
</head> 

<body> 
    {{loginButtons}} 

    {{> userUpdate}} 

    {{#if currentUser}} 
    {{> content}} 
    {{/if}} 
</body> 

<template name="userUpdate"> 
    <p> 
    <input id="updateUser" type="button" value="Update User Value" /> 
    User last update: <span id="lastUpdated">{{lastUpdated}}</span> 
    </p> 
</template> 

<template name="content"> 
    <p>Render count: <span id="renderCount"></span></p> 
</template> 

जावास्क्रिप्ट

if (Meteor.isClient) { 
    Meteor.startup(function() { 
    Session.set("contentRenderedCount", 0); 
    }); 

    Template.content.rendered = function() { 
    var renderCount = Session.get("contentRenderedCount") + 1; 
    Session.set("contentRenderedCount", renderCount); 
    document.getElementById("renderCount").innerText = renderCount; 
    }; 

    Template.userUpdate.events = { 
    "click #updateUser": function() { 
     Meteor.users.update({_id: Meteor.userId()}, {$set: {lastActive: new Date()}}); 
    } 
    }; 

    Template.userUpdate.lastUpdated = function() { 
    return Meteor.user().lastActive; 
    }; 

} 

if (Meteor.isServer) { 
    Meteor.users.allow({ 
    'update': function() { 
     return true; 
    } 
    }); 
} 

अद्यतन: मैं इस उदाहरण में एक व्याख्या की है चाहिए थोड़ा। उपयोगकर्ता बनाने के बाद, अद्यतन उपयोगकर्ता मान बटन पर क्लिक करने से, रेंडर गणना बढ़ने का कारण बनती है। ऐसा इसलिए है क्योंकि यह {{#if currentUser}} में लपेटा गया है। यदि यह हटा दिया गया है, तो आप देखेंगे कि रेंडर गिनती 1

इसके अलावा, आपको अपनी परियोजना में accounts-ui और accounts-password पैकेज जोड़ना होगा।

उत्तर

8

उल्का किसी भी टेम्पलेट को फिर से प्रस्तुत करेगा जिसमें परिवर्तनीय चर शामिल हैं। आपके मामले में {{currentUser}}Meteor.user() है जो उपयोगकर्ता का डेटा युक्त एक ऑब्जेक्ट है। जब आप उपयोगकर्ता प्रोफ़ाइल को अपडेट करते हैं, ऑब्जेक्ट बदलता है और यह ऑब्जेक्ट को शामिल करने वाले सभी प्रतिक्रियाओं को दोबारा गणना करने के लिए उल्का बताता है।

हम प्रतिक्रियात्मकता थोड़ा बदल सकता है तो यह केवल में परिवर्तन के प्रति प्रतिक्रिया करता है कि क्या वस्तु के भीतर ही/बाहर और कुछ भी नहीं में उपयोगकर्ता के लॉग:

Meteor.autorun(function() { 
    Session.set("meteor_loggedin",!!Meteor.user()); 
}); 

Handlebars.registerHelper('session',function(input){ 
    return Session.get(input); 
}); 

अपने HTML

{{#if session "meteor_loggedin"}} 
    {{> content}} 
{{/if}}  
+0

यही काम किया पूरी तरह से। धन्यवाद! – Irving

+1

@MurWade नए ब्लेज़ इंजन के साथ कुछ महीने पहले उल्का 0.8.3 के साथ intro'd। अब आप {{{#if currentUser}} का उपयोग कर सकते हैं ... {{/ if}} ' – Akshat

+0

पुन: प्रस्तुत करने के अंदर सामान के बिना {{pathFor path = 'dashboard'}} का उपयोग करके चेक को फिर से प्रस्तुत करना , किसी भी विचार को अक्षम करने के लिए कैसे? – digz6666

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