আমি বুঝতে পারি যে আমি এই পার্টিতে কিছুটা দেরি করছি, তবে আমি এমন একটি সমাধান ফেলতে চেয়েছিলাম যা আমি ইদানীং ব্যবহার করেছি। যাইহোক, আমি প্রথমে উল্লেখ করা যাক ...
Ails.১ / ৩.২ রাস্তাটি (না, স্যার। আমি এটি পছন্দ করি না)
দেখুন: http://guides.rubyonrails.org/asset_pipline.html#how-to-use-the-setset-pipline
আমি এই উত্তরের সম্পূর্ণতার জন্য নিম্নলিখিতগুলি অন্তর্ভুক্ত করছি এবং কারণ এটি একটি অবিশ্বাস্য সমাধান নয় ... যদিও আমি এর পক্ষে বেশি যত্ন নিই না।
অনুরোধ করা এই প্রশ্নের মূল লেখক হিসাবে দর্শন-ওরিয়েন্টেড না হয়ে "রেলস ওয়ে" একটি নিয়ামক-ভিত্তিক সমাধান। সেখানে নিয়ামক-নির্দিষ্ট জেএস ফাইলগুলি তাদের নিজ নিজ নিয়ন্ত্রকের নামে নামকরণ করেছে। এই সমস্ত ফাইলের একটি ফোল্ডার ট্রিতে স্থাপন করা হয়েছে যা অ্যাপ্লিকেশনের কোনওটিতে ডিফল্টরূপে অন্তর্ভুক্ত নেই .js নির্দেশনার প্রয়োজন।
নিয়ামক-নির্দিষ্ট কোড অন্তর্ভুক্ত করতে, নিম্নলিখিতটিতে একটি দর্শন যোগ করা হয়েছে।
<%= javascript_include_tag params[:controller] %>
আমি এই সমাধানটিকে ঘৃণা করি, তবে এটি সেখানে এবং দ্রুত। সম্ভবত, আপনি পরিবর্তে এই ফাইলগুলিকে "people-index.js" এবং "people-show.js" এর মতো কিছু বলতে পারেন এবং তারপরে "#{params[:controller]}-index"
একটি ভিউ-ওরিয়েন্টেড সমাধান পাওয়ার মতো কিছু ব্যবহার করতে পারেন । আবার, দ্রুত স্থির করুন, তবে এটি আমার সাথে ভালভাবে বসে না।
আমার ডেটা অ্যাট্রিবিউট ওয়ে
আমাকে পাগল বলুন, তবে আমি যখন নিযুক্ত থাকি তখন আমার সমস্ত জেএস কম্পাইল করে অ্যাপ্লিকেশন.জেজে মাইন্ড করা উচিত। এই ছোট্ট স্ট্রাগলার ফাইলগুলি পুরো জায়গাতেই অন্তর্ভুক্ত করতে আমি মনে রাখতে চাই না।
আমি আমার সমস্ত জেএসকে একটি কমপ্যাক্টে, শীঘ্রই হতে যাওয়া ব্রাউজারের ক্যাশেড, ফাইলে লোড করি। যদি আমার অ্যাপ্লিকেশন.জেএস এর কোনও নির্দিষ্ট টুকরোটি কোনও পৃষ্ঠায় ফায়ার করা দরকার হয়, আমি এইচটিএমএলকে বলি, রেলগুলি নয়।
আমার জেএসকে নির্দিষ্ট উপাদান আইডিতে লক করা বা মার্কার ক্লাসগুলির সাথে আমার এইচটিএমএল লিটারের পরিবর্তে, আমি একটি কাস্টম ডেটা অ্যাট্রিবিউট ব্যবহার করি data-jstags
।
<input name="search" data-jstag="auto-suggest hint" />
প্রতিটি পৃষ্ঠায়, আমি ব্যবহার করি - এখানে পছন্দসই জেএস লাইব্রেরি পদ্ধতি সন্নিবেশ করান - যখন ডিওএম লোডিং শেষ করে কোড চালায়। এই বুটস্ট্র্যাপিং কোডটি নিম্নলিখিত ক্রিয়া সম্পাদন করে:
- চিহ্নিত ডিওমে থাকা সমস্ত উপাদানগুলির উপরে আইট্রেট করুন
data-jstag
- প্রতিটি উপাদানের জন্য, ট্যাগ স্ট্রিংগুলির একটি অ্যারে তৈরি করে স্পেসে অ্যাট্রিবিউট মানটি ভাগ করুন।
- প্রতিটি ট্যাগ স্ট্রিংয়ের জন্য, সেই ট্যাগের জন্য একটি হ্যাশে একটি অনুসন্ধান করুন।
- যদি কোনও মিলে যাওয়া কীটি পাওয়া যায় তবে উপাদানটিকে প্যারামিটার হিসাবে পাস করে এর সাথে যুক্ত ফাংশনটি চালান।
সুতরাং বলুন যে আমি আমার অ্যাপ্লিকেশন.জেএস-এ কোথাও নিচের সংজ্ঞা দিয়েছেন:
function my_autosuggest_init(element) {
/* Add events to watch input and make suggestions... */
}
function my_hint_init(element) {
/* Add events to show a hint on change/blur when blank... */
/* Yes, I know HTML 5 can do this natively with attributes. */
}
var JSTags = {
'auto-suggest': my_autosuggest_init,
'hint': my_hint_init
};
বুটস্ট্র্যাপিং ঘটনা প্রয়োগ করতে যাচ্ছে my_autosuggest_init
এবংmy_hint_init
অনুসন্ধানের ইনপুটটির বিপরীতে কার্যগুলি , এটি একটি ইনপুট হিসাবে রূপান্তর করবে যা ব্যবহারকারীর ধরণের সময় প্রস্তাবনার তালিকাকে প্রদর্শন করে, পাশাপাশি ইনপুটটি ফাঁকা এবং ফোকাসবিহীন অবস্থায় রেখে কিছু প্রকারের ইনপুট ইঙ্গিত প্রদান করে।
কিছু উপাদান ট্যাগ করা না হলে data-jstag="auto-suggest"
না থাকলে স্বয়ংক্রিয়-পরামর্শ কোডটি কখনই জ্বলে না। যাইহোক, এটি সর্বদা সেখানে থাকে, সর্বনিম্ন হয় এবং অবশেষে আমার অ্যাপ্লিকেশনটিতে ক্যাশে থাকে times সময়ের জন্য আমার কোনও পৃষ্ঠায় এটি প্রয়োজন।
আপনি যদি আপনার ট্যাগযুক্ত জেএস ফাংশনে অতিরিক্ত পরামিতিগুলি পাস করতে চান তবে আপনাকে কিছু সৃজনশীলতা প্রয়োগ করতে হবে। হয় ডেটা-প্যারামটার বৈশিষ্ট্য যুক্ত করুন, কিছু ধরণের প্যারামিটার সিনট্যাক্স নিয়ে আসুন, বা একটি সংকর পদ্ধতির ব্যবহার করুন।
এমনকি যদি আমার কাছে কিছু জটিল কর্মপ্রবাহ থাকে যা নিয়ামক-নির্দিষ্ট বলে মনে হয়, তবে আমি কেবল এটির জন্য আমার লিব ফোল্ডারে একটি ফাইল তৈরি করব, এটিকে অ্যাপ্লিকেশন.জেজে প্যাক করব এবং এটি 'নতুন-জিনিস-উইজার্ড' এর মতো কিছু দিয়ে ট্যাগ করব। আমার বুটস্ট্র্যাপটি যখন ট্যাগটি হিট করে, তখন আমার সুন্দর, অভিনব উইজার্ডটি তাত্ক্ষণিকভাবে চালানো হবে। এটি যখন প্রয়োজন হয় তখন নিয়ামকের দৃষ্টিতে চলে যায়, তবে অন্যথায় এটি নিয়ামকের সাথে মিলিত হয় না। প্রকৃতপক্ষে, আমি যদি আমার উইজার্ডটি ডানদিকে কোড করি তবে আমি ভিউগুলিতে সমস্ত কনফিগারেশন ডেটা সরবরাহ করতে সক্ষম হতে পারি এবং তাই আমার উইজার্ডটি অন্য যে কোনও নিয়ামকের প্রয়োজন পরে পরে পুনরায় ব্যবহার করতে সক্ষম হব।
যাইহোক, এইভাবে আমি কিছুক্ষণের জন্য পৃষ্ঠা সুনির্দিষ্ট জেএস বাস্তবায়ন করেছি এবং এটি সহজ সাইট ডিজাইন এবং আরও জটিল / সমৃদ্ধ অ্যাপ্লিকেশনগুলির জন্য উভয়ই আমাকে ভালভাবে পরিবেশন করেছে। আশা করি আমি যে দুটি সমাধান এখানে উপস্থাপন করেছি তার মধ্যে একটি, আমার পথ বা রেলের উপায়, যে কেউ ভবিষ্যতে এই প্রশ্নটি আসে তার পক্ষে সহায়ক।