के अप्रैल 2012 के रूप में Errata:अंडरस्कोर 1.3.2 (9 अप्रैल, 2012) _.template()
में परिवर्तन शुरू की है, changelog और क्या यहाँ वर्णित किया गया है ऊपर से पता चला है हो सकता है के लिए जटिलताओं के बाद से स्रोत की जाँच करें।
हां और नहीं - टेम्पलेट का पहली बार जावास्क्रिप्ट कोड (कोड पढ़ने के लिए कठिन) की एक स्ट्रिंग में अनुवाद किया गया है और कोड के एक ब्लॉक के रूप में निष्पादित किया गया है, इसलिए यदि आप सिंटैक्स त्रुटि की तलाश में हैं तो आपको अपमानजनक कोड को हटाना होगा टेम्पलेट से आप निष्पादित करने का प्रयास कर रहे हैं।
लेकिन अगर यह कुछ और, embedding एक <% return __p.join(''); %>
निष्पादन तोड़ने के लिए और है कि बात करने के लिए टेम्पलेट ऊपर का परिणाम वापस आ जाएगी है (क्यों देखने के लिए स्रोत पढ़ते हैं, लेकिन अनिवार्य रूप से, टेम्पलेट ब्लॉक के परिणाम __p
नामित एक सरणी में डाल रहे हैं एक के बाद एक)।
तुम भी, जबकि अपने टेम्पलेट मूल्यांकन करता है (यानी निदान को देखने के लिए अपने खाके में <% console.log(<..>) %>
डाल प्रवेश करने कर सकते हैं। और अधिक उन्नत समस्या निवारण के लिए, आप भी अपने पसंदीदा डीबगर में छोड़ने के लिए अपनी टेम्पलेट कोड में एक <% debugger; %>
डाल सकता है। हालांकि कोड आप देखेंगे कि आपको पढ़ने के लिए असभ्य रूप से पढ़ना होगा, आपको मूल्यांकन टेम्पलेट्स स्कोप तक पहुंच होगी।
यदि मैं व्यापक काम कर रहा था और अधिक व्यापक डिबगिंग सुविधाओं की आवश्यकता थी, तो शायद मैं underscore.js
स्क्रिप्ट की प्रतिलिपि लेता हूं और कुछ नैदानिक जोड़ता हूं _.template()
समारोह में ही समर्थन कोड उदाहरण के लिए:।
_.template = function(str, data) {
var c = _.templateSettings;
var tmpl = 'var __p=[],print=function(){__p.push.apply(__p,arguments);};' +
'with(obj||{}){__p.push(\'' +
str.replace(/\\/g, '\\\\')
.replace(/'/g, "\\'")
.replace(c.interpolate, function(match, code) {
return "'," + code.replace(/\\'/g, "'") + ",'";
})
.replace(c.evaluate || null, function(match, code) {
return "');" + code.replace(/\\'/g, "'")
.replace(/[\r\n\t]/g, ' ') + "__p.push('";
})
.replace(/\r/g, '\\r')
.replace(/\n/g, '\\n')
.replace(/\t/g, '\\t')
+ "');}return __p.join('');";
console.log(tmpl.replace(/;/g, '\n')); // <- dump compiled code to console before evaluating
var func = new Function('obj', tmpl);
return data ? func(data) : func;
};
धन्यवाद, आपने कुछ अच्छे दृष्टिकोण शामिल किए हैं और वे निश्चित रूप से डिबगिंग में सहायता करेंगे।
यदि प्रक्रिया में धीमा था तो यह अच्छा होगा, लेकिन डिबग मोड को आसान बनाना है कि टेम्पलेट को चलाया जा सकता है। यह PHP के समान प्रकार की त्रुटियों को देखने की क्षमता प्राप्त करने में सक्षम होने के लायक होगा।
मुझे ऐसा करने का अनुमान है, इसे कोड ब्लॉक के बीच की रेखाओं को गिनना होगा, और कुछ प्रकार के आंतरिक वृद्धिकर्ता को बनाए रखना होगा। – RobKohr