2012-01-25 6 views
6

मैं मूंछ स्वरूपण पैटर्न के साथ रीढ़ की हड्डी के अंडरस्कोर टेम्पलेटिंग इंजन का उपयोग कर रहा हूं।बैकबोन/अंडरस्कोर टेम्पलेट मूंछ प्रारूप में # पाउंड/हैश प्रतीक पर त्रुटि उत्पन्न कर रहा है?

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

enter image description here

सुझाव:

"Uncaught SyntaxError: Unexpected token ILLEGAL" 

और अंक के पश्व-अनुरेखन, जो बहुत बेकार है लेकिन फ़ायरबग में मैं इस तरह की एक और अधिक उपयोगी त्रुटि मिलती है में रेखांकित करने टेम्पलेट समारोह कि हैश प्रतीक '#' मुद्दा है, जो समझ में आता है क्योंकि मुझे पता है कि मूंछ ठीक काम कर रहा है क्योंकि प्रोजेक्ट के कई अन्य हिस्सों में इसका उपयोग कर रहा है, यह भी पहली बार है कि मैं हैश सिबोल का उपयोग कर रहा हूं मेरे टेम्पलेट्स। यह लूपिंग फीचर या इंटरपोल के साथ या तो एक समस्या की तरह दिखता है अंडरस्कोर के लिए टयन/टेम्पलेट सेटिंग्स।

यहाँ मेरी टेम्पलेट के प्रासंगिक टुकड़ा है:

<div class="thumblist thumblistleft" id="currentprojectslist"> 
    <div class="thumb-list-header"> 
     <h2>current projects</h2> 
    </div> 
    <div class="thumb-list-area"> 
     <ol> 
     {{#worklist}}  <!----- LOOK HERE ---> 
      {{#current}} 
       <li><a>{{title}}</a></li> 
      {{/current}} 
     {{/worklist}} 
     </ol> 
    </div> 
</div> 

और यहाँ JSON का एक नमूना (जो सब ठीक सत्यापित करता है)

{blah blah blah lot in here before,"worklist":[{"thumb":"img/project-s.jpg","id":"340","title":"Test Project One","desc":"big load of content here","current":true}], and so on....} 

मैं शुरू में यहां संदर्भ के लिए इस उदाहरण पीछा कर रहा था है: http://mustache.github.com/#demo

अब यहां समस्या है कि मुझे लगता है कि समस्या हो सकती है:

Underscore.js एक मूंछें टेम्पलेट प्रतिपादन से पहले इस का उपयोग कर पता चलता है:

_.templateSettings = { 
    evaluate : /\{\[([\s\S]+?)\]\}/g, 
    interpolate : /\{\{([\s\S]+?)\}\}/g 
}; 

भी:

interpolate : /\{\{(.+?)\}\}/g 

इसके अलावा बस लगाना बयान, Ive दोनों की कोशिश की। हालांकि मेरा रेगेक्स ज्ञान वास्तव में खराब है और मुझे लगता है कि यह हैश को समायोजित नहीं कर सकता है? किसी भी दर पर .... मैं पूरी तरह से स्टंप हूँ। क्या कोई मेरी मदद कर सकता है?

क्या यह इस तरह लूप करना भी संभव है? अंडरस्कोर स्रोत को देखकर मुझे यकीन नहीं कर रहा हूँ: http://documentcloud.github.com/underscore/docs/underscore.html#section-120

बहुत

+0

पैटर्न '/ \ {\ {([\ s \ S] +?) \} \}/g'' {{# foo}} 'और' # foo' पर कब्जा करें। आप '/ \ {\ {#? ([\ S \ S] +?) \} \}/G' का उपयोग कर हैश को कैप्चर करने से बच सकते हैं, मुझे लगता है कि इससे अन्य समस्याएं पैदा होंगी। – Qtax

+0

क्या आपने कभी इस तरह लूप का प्रबंधन किया था? मैं वास्तव में चाहूंगा कि, मेरे JSON में एक ध्वज मौजूद है या नहीं, यह जांचने के लिए एकाधिक मूल्यांकन लाइनों में एक साधारण लिखने के लिए अंडरस्कोर में बहुत परेशान है। – Daniel

+0

अरे, दुख की बात है कि अंडरस्कोर इसे मूल रूप से नहीं करेगा, आपको mustache.js को शामिल करना होगा और mustache.render करना होगा, जैसा कि नीचे है .. यह वास्तव में परेशान है कि मैं – Alex

उत्तर

7

मैं किसी और को इस मुद्दे का सामना करने की sakes के लिए पोस्टिंग कर रहा हूँ धन्यवाद। बिना किसी लाभ के बहुत सारे गुगलिंग के बाद, मैं अंडरस्कोर.जेएस स्रोत के माध्यम से एक दांतेदार कंघी के साथ चला गया और मूल रूप से आपको अंडरस्कोर के टेम्पलेट सिंटैक्स का उपयोग करना होगा, अपने JSON में बदसूरत फ़ंक्शन प्रोसेसर लिखना होगा या मूंछ शामिल करना होगा।अपने स्रोत और फोन में js:

Mustache.render(mytemplate,mymodel) 

और foresake अंडरस्कोर के

_.template(..) function 

कष्टप्रद लेकिन जो कुछ भी, मुझे आशा है कि मदद करता है किसी को

23

आज इस समस्या के खिलाफ आया। यह मुद्दा ऐसा लगता है कि अंडरस्कोर टेम्पलेटिंग करता है: बचें, इंटरपोलेट करें, फिर मूल्यांकन करें। तो अगर आप स्पष्ट रूप से अपने प्रक्षेप regex में {{# लिए कोई भी मिलान की अनदेखी करने की जरूरत है:

_.templateSettings = { 
    evaluate: /\{\{#([\s\S]+?)\}\}/g,   // {{# console.log("blah") }} 
    interpolate: /\{\{[^#\{]([\s\S]+?)[^\}]\}\}/g, // {{ title }} 
    escape:  /\{\{\{([\s\S]+?)\}\}\}/g,   // {{{ title }}} 
} 

यह वास्तव में मूंछें के रूप में एक ही तरह से काम नहीं करता है: वहाँ अंडरस्कोर के templating में उचित ब्लॉक नहीं हैं, इसलिए के लिए कोई जरूरत नहीं है एक बंद ब्लॉक {{/}}। आपको बस अपने स्टेटमेंट्स से मिलान करना होगा जैसे आप मानक अंडरस्कोर टेम्पलेट्स के साथ करेंगे।

+0

से सहमत हूं ध्यान दें कि उपर्युक्त वाक्यविन्यास के साथ आपको यह सुनिश्चित करना चाहिए कि एक जगह है आपकी अभिव्यक्ति और '{{}}' के बीच। उदाहरण: '{{test}} 'काम करेगा,' {{test}}' नहीं होगा। – Niyaz

1

मैं # प्रतीक का उपयोग नहीं कर रहा हूँ, लेकिन मैं एक ऐसी ही त्रुटि का अनुभव एक बार मैं सेटिंग के साथ नहीं छोड़ा जाएगा मूल्यों के लिए ट्रिपल मूंछें {{{name}}} का उपयोग करने की कोशिश की: अगर यही कारण है कि तुम यहाँ आया है

interpolate : /\{\{\{(.+?)\}\}\}/g, 
escape : /\{\{(.+?)\}\}/g, 

, निम्नलिखित सेटिंग काम करता है

interpolate : /\{\{\{(\s*\w+?\s*)\}\}\}/g, 
escape : /\{\{(\s*\w+?\s*)\}\}(?!\})/g, 

मैं मैक्स की प्रारूप करने की कोशिश की लेकिन क्योंकि मैं डबल और ट्रिपल मूंछें भाव का मिश्रण है कि मेरे लिए काम नहीं किया और जब ट्रिपल अभिव्यक्ति ठीक यह चर के प्रत्येक छोर से एक चरित्र अलग करना था काम डबल मूंछ यानी {{title}} में नाम itl

+0

मैं यहां मूल प्रश्न के लिए आया था, जवाबों का पालन किया और यह रेगेक्स मेरे लिए क्या काम किया, धन्यवाद! –

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