2015-02-17 4 views
6

मैं CoffeeScript में यह कार्य होJquery वस्तु RequireJS अनुकूलक के साथ कम करने के बाद सामान्य चर में बदला r.js

render: -> 
_.each @$elements, ($el) => 
    if $el[0].id is 'tabs-div' 
    emptySlate = "<div class='js-empty-slate' style='padding:40px;'><h3>no data available</h3><div>" 
    @setEmptyPlacholde($el, emptySlate) 
    return 

    @setEmptyPlacholde($el) 


setEmptyPlacholde: ($el, emptySlate)-> 
emptySlateHTML = emptySlate or "<h3 class='js-empty-slate'>no data available</h3>" 
if $el.hasClass('mobile-os-con') or 
    $el.hasClass('time-of-visit-con') or 
    $el.hasClass('gender-visit-con') or 
    $el.hasClass('time-redemption-sales-con') or 
    $el.hasClass('gender-redemption-con') 

    $el.children().hide() 
else 
    $el.empty() 
$el.append emptySlateHTML 

$ तत्वों एक jQuery चर जो इस तरह सरणी का उपयोग करता है:

$elements: [ 
$("#tabs-div") 
$("#visits-male") 
$("#visits-female") 
$("#days-of-visits") 
$(".time-of-visit-con") 
] 

जब मैंने RequJS ऑप्टिमाइज़र r.js का उपयोग किया जो उत्पन्न किए गए minified code Uglify का उपयोग करता है .. इस तरह दिखता है:

render:function(){var e=this;return _.each(this.$elements,function(t){var n;if(t[0].id==="tabs-div"){n="<div class='js-empty-slate' style='padding:40px;'><h3>no data available</h3><div>",e.setEmptyPlacholde(t,n);return}return e.setEmptyPlacholde(t)})} 

पिछले minified कोड में, $elt बन गया .. इसलिए इसने उत्पादन में jQuery तत्व के रूप में $el निष्पादित करने से इंकार कर दिया।

यह समस्या है लेकिन मुझे नहीं पता कि ऐसा क्यों होता है। क्या कोई यह समझा सकता है कि यह मेरे लिए क्यों होता है, धन्यवाद।

अद्यतन: न्यूनतम किया गया कोड, समस्या लेकिन स्क्रिप्ट सरणी लोड ठीक से में नोड्स से पहले मार डाला नहीं था लेकिन मैं लागू कर रहा हूँ दस्तावेज़ के बाद समारोह तैयार जिसका मतलब है कि डोम पूरी तरह से लोड किया जाना चाहिए किया जाना है।

संकेत: मैं स्क्रिप्ट टैग डाल रहा हूं, और यह कोड ठीक नहीं होने पर ठीक से काम करता है।

+0

यह वही कोड नहीं है। आपका छोटा कोड एक 'चयनकर्ता' संपत्ति का संदर्भ देता है जबकि असीमित कोड संदर्भ 'आईडी'। इसके अलावा, तत्व में असीमित कोड अनुक्रमण; छोटा कोड नहीं है। क्या आप वाकई सही उदाहरण पोस्ट कर चुके हैं? – dherman

+0

क्षमा करें, आप सही हैं। मैं एक और छोटा कोड साझा कर रहा था जिसे मैं बस खेल रहा था। अब, मैंने इसे सही minified कोड के साथ अद्यतन किया है। मुझे सूचित करने के लिए धन्यवाद। –

+3

छोटा कोड मेरे लिए अच्छा लग रहा है, यह कॉफ़ीस्क्रिप्ट कोड के समान ही है। इससे कोई फर्क नहीं पड़ता कि '$ el' अब यह एक वैरिएबल के लिए एक स्थानीय नाम है जो केवल' _.each' फ़ंक्शन आमंत्रण – JoseM

उत्तर

0

सबसे पहले, आपके <div class='js-empty-slate' style='padding:40px;'><h3>no data available</h3><div> < - ठीक से बंद नहीं दिख रहा है।

जहां तक ​​परिवर्तनीय .. यह UgliyJS के लिए डिफ़ॉल्ट व्यवहार प्रतीत होता है, यह ऑप्टिमाइज़ेशन के हिस्से के रूप में प्रदान किए गए वेरिएबल नाम को छोटा कर रहा है। यह किसी भी मुद्दे का कारण नहीं करना चाहिए ... लेकिन यदि आप इसे रोकना चाहते हैं, विकल्प के तहत uglify: { no_mangle: true }r.js को अनुकूलक सेटिंग्स जोड़ने का प्रयास करें: बस पर

uglify2: { 
    mangle: false 
} 
+0

@ nouran-mahmoud सुनिश्चित नहीं है यदि आप नीचे मतदान करते हैं या कोई और ... क्या आप अपनी सेटिंग्स साझा कर सकते हैं? – webaholik

+0

मैंने आपके उत्तर को कम मत दिया, लेकिन मुझे विश्वास है कि बिंदु फ़ंक्शन या चर नामों को छोटा नहीं कर रहा है। मैं जानना चाहता हूं कि यह छोटा होने पर ठीक से क्यों काम नहीं करता है, हालांकि इसे काम करना चाहिए। –

0

:

english: { 
    ..your settings... 
    options: { 
    ...your other options... 
    uglify: { 
     no_mangle: true 
    }, 
    } 
} 

Uglify2 के लिए, यह बजाय का उपयोग

$elements: $("#tabs-div,#visits-male,#visits-female,#days-of-visits,.time-of-visit-con") 

और

+०१२३५१६४१०६१ - एक विशुद्ध रूप से तकनीकी टिप्पणी आप की तरह चीजों के साथ कोड सुधार कर सकते हैं
$elements.filter("#tabs-div") 

वैरिएबल नामकरण के लिए - परिवर्तनीय नाम किसी सार्वजनिक एपीआई के अलावा किसी भी चीज़ के लिए बिल्कुल कोई फर्क नहीं पड़ता है - इसलिए एक कोड मिनीफायर/यूग्लीफायर परिवर्तनीय नामों को सबसे कम संभव में बदल देगा, दूसरे शब्दों में एकल से शुरू होता है चरित्र, और अक्सर एक यादृच्छिक क्रम में (हालांकि कुछ ए, बी, सी आदि में शुरू होते हैं)। डिफ़ॉल्ट रूप से uglifier समझ जाएगा कि window आदि वैश्विक है और इसका नाम बदल नहीं है।

जब तक आप बंद होने में सबकुछ लपेट नहीं लेते हैं, तो आपको $: window["jQuery"] जैसे कुछ से शुरू करना चाहिए, इसलिए परिवर्तनीय नामांकन होने पर आपका स्थानीय var $ सही होगा और यह सही चीज़ पर इंगित करेगा।

तो एक बंद में सब कुछ लपेटकर (सब कुछ के चारों ओर एक समारोह लपेटो इसे तुरंत कॉल कर सकते हैं) तो आप एक तर्क के रूप jQuery पास होता है - अक्सर आप भी लंबे समय तक नामित दे देते हैं वैश्विक वार्स कि भी window और document की तरह इस्तेमाल किया जाता है।

आम तौर पर आप HTML के अंत में अपनी स्क्रिप्ट शामिल करते हैं, या इसे $() के भीतर लपेटते हैं जो दस्तावेज़.ready राज्य के बराबर है।

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