কোনও রেলস 3 অ্যাপে পৃষ্ঠা নির্দিষ্ট জাভাস্ক্রিপ্ট যুক্ত করার সর্বোত্তম উপায়?


159

রেল 3 এর কিছু অবারিত জাভাস্ক্রিপ্ট রয়েছে যা দুর্দান্ত।

তবে আমি ভাবছিলাম যে কোনও নির্দিষ্ট পৃষ্ঠার জন্য অতিরিক্ত জাভাস্ক্রিপ্ট অন্তর্ভুক্ত করা ভাল উপায়।

উদাহরণস্বরূপ, যেখানে আমি আগে কাজটি করতে পেরেছিলাম:

<%= f.radio_button :rating, 'positive', :onclick => "$('some_div').show();" %>

আমরা এখন এটির মতো কিছু দিয়ে নিরস্তর করতে পারি

<%= f.radio_button :rating, 'positive' %>

# then in some other file
$('user_rating_positive').click(function() {
  $('some_div').show();
}

সুতরাং আমি অনুমান করি যে আমার প্রশ্নটি কোথায় / কীভাবে জাভাস্ক্রিপ্ট অন্তর্ভুক্ত করা যায়? আমি application.jsফাইলটি পূরণ করতে চাই না কারণ এই জাভাস্ক্রিপ্টটি কেবলমাত্র এই এক দর্শনের জন্য প্রযোজ্য। আমি কি প্রতিটি পৃষ্ঠার জন্য কোনও কাস্টম জাভাস্ক্রিপ্ট ফাইল অন্তর্ভুক্ত করব, অথবা শিরোনামটি সন্ধান করছে এমন একটি পরিবর্তনশীল স্থানে এটি আটকে রাখা উচিত?



যারা এটি কীভাবে কাজ করে এবং কী সেরা তা সম্পর্কে সম্পূর্ণ বোঝার জন্য দয়া করে Railsapps.github.io/rails- জাভাস্ক্রিপ্ট- অন্তর্ভুক্ত- আন্তঃদেশীয় html পড়ুন । এটি এই বিষয়ে আমি এখন পর্যন্ত সেরা ডকুমেন্টেশন দেখেছি। এটি কেবল কারাগারের জন্যই নয়, যাহারা ওয়েব ডেভসে লেনদেন করছেন তাদের জন্য এটি দুর্দান্ত পঠিত। এই কারণেই রেলপথে জিনিসগুলি করা ভাল। আমি অবশ্যই আমার ভবিষ্যতের প্রশ্নের জন্য অপরিষ্কার রেলগুলি ব্যবহার করব। কি দারুন.
DutGRIFF

2
@ কেটগ্রিগরি যা নতুনতর।
সিরো সান্তিলি 郝海东 冠状 病 六四 事件 法轮功

উত্তর:


153

আমি যা করতে চাই তা হ'ল একটি content_for :headব্লকের প্রতি দর্শনের জাভাস্ক্রিপ্ট এবং তারপরে yieldআপনার অ্যাপ্লিকেশন বিন্যাসে সেই ব্লকে। উদাহরণ স্বরূপ

যদি এটি বেশ ছোট হয়:

<% content_for :head do %>
  <script type="text/javascript">
    $(function() {
      $('user_rating_positve').click(function() {
        $('some_div').show();
      }
    });
  </script>
<% end %>

বা, যদি দীর্ঘ হয় তবে:

<% content_for :head do %>
  <script type="text/javascript">
    <%= render :partial => "my_view_javascript"
  </script>
<% end %>

তারপরে, আপনার লেআউট ফাইলটিতে

<head>
  ...
  <%= yield :head %>
</head>

40
কেন ব্যবহার করবেন না <%= javascript_include_tag "my_javascipt_file" %> ?
এজেপি

5
@ এজেপি আমি অনুমান করি তখন এটি সম্পত্তির পাইপলাইনটির উদ্দেশ্যকে পরাস্ত করে
লুলালালা

2
@ লুলালালা তবে উত্তরের কোডটি কি যাইহোকভাবে না করে তবে ম্যাসিয়ার ফ্যাশনে চলে?
এজেপি

8
@ এজেপি এটি বার্তাবহ, তবে এটির উত্তরের চেয়ে কম অনুরোধ করার জন্য এটির একটি কম অনুরোধ রয়েছে।
লুলালালা

4
আমি এই নিবন্ধটি Railsapps.github.com/rails-javascript-include-extern.html
জিগি

103

আপনি যদি কেবল একটি পৃষ্ঠায় জাভাস্ক্রিপ্ট অন্তর্ভুক্ত করতে চান তবে আপনি অবশ্যই এটি পৃষ্ঠাটি ইনলাইনে অন্তর্ভুক্ত করতে পারেন, তবে আপনি যদি নিজের জাভাস্ক্রিপ্টকে গ্রুপ করতে এবং সম্পদ পাইপলাইন, মিনিফাইড জেএস ইত্যাদির সুবিধা নিতে চান তবে এটি করা সম্ভব এবং অতিরিক্ত জেএস সম্পদগুলি যা একত্রিত হয় এবং কেবলমাত্র আপনার জেএসগুলিকে গ্রুপগুলিতে বিভক্ত করে নির্দিষ্ট পৃষ্ঠাগুলিতে লোড করা হয় যা কেবলমাত্র সাইটের কয়েকটি নির্দিষ্ট নিয়ামক / দর্শন / বিভাগে প্রয়োগ হয়।

আপনার জেসগুলি সম্পদের জন্য ফোল্ডারে সরান, প্রতিটির জন্য পৃথক ম্যানিফেস্ট ফাইল সহ, তাই আপনার যদি কোনও অ্যাডমিন জেএস লাইব্রেরি থাকে যা কেবল ব্যাকএন্ডে ব্যবহৃত হয়, আপনি এটি করতে পারেন:

  • সম্পদ
    • JavaScripts
      • অ্যাডমিন
        • ... JS
      • প্রশাসন.js (অ্যাডমিন গ্রুপের জন্য প্রকাশিত)
      • application.js (অ্যাপ্লিকেশন গ্লোবাল গ্রুপের জন্য ম্যানিফেস্ট)
      • বিশ্বব্যাপী
        • ... JS

বিদ্যমান প্রয়োগে। js

//= require jquery
//= require jquery_ujs
//= require_tree ./global // requires all js files in global folder

একটি নতুন অ্যাডমিন.জেএস মেনিফেস্ট ফাইলে

//= require_tree ./admin // requires all js files in admin folder

কনফিগারেশন / product.rb সম্পাদনা করে এই নতুন জেএস ম্যানিফেস্টটি লোড হয়েছে তা নিশ্চিত করুন sure

config.assets.precompile += %w( admin.js )

তারপরে আপনার পৃষ্ঠার বিন্যাসটি সামঞ্জস্য করুন যাতে আপনি পৃষ্ঠার শীর্ষের জন্য কিছু অতিরিক্ত জেএস অন্তর্ভুক্ত করতে পারেন:

<%= content_for :header %>   

তারপরে আপনি যেখানে এই সুনির্দিষ্ট জেএস গ্রুপ (সেইসাথে সাধারণ অ্যাপ্লিকেশন গ্রুপ) এবং / অথবা কোনও পৃষ্ঠা-নির্দিষ্ট জেএস, সিএসএস ইত্যাদি অন্তর্ভুক্ত করতে চান সেখানে দেখুন:

<% content_for :header do %>
  <%= javascript_include_tag 'admin' %>  
<% end %>

আপনি অবশ্যই CSS এর সাথে একই জিনিসটি করতে পারেন এবং কেবল সাইটের নির্দিষ্ট কিছু ক্ষেত্রে প্রয়োগ করার জন্য এটি একইভাবে গ্রুপবদ্ধ করতে পারেন।


যদি আপনি আপনার সমস্ত প্রকাশ একই জায়গায় রাখেন তবে আপনি রেলগুলি that ফোল্ডারে থাকা সমস্ত কিছু পূর্বনির্ধারিত করতে বলতে পারেন। এইভাবে আপনাকে কেবল একবার প্রোডাকশন.আরবি সম্পাদনা করতে হবে এবং আপনি এতে কী যুক্ত করেছেন তা ট্র্যাক করবেন না।
আনডিস্ট্রাকশন

আপনি কী করতে পারেন তা জানতেন না - সুতরাং আপনার 'ম্যানিফাইস্ট' ফোল্ডারটি থাকতে পারে যা আপনার ম্যানিফাইস্টগুলি, পাশাপাশি পৃথক জেএস গ্রুপগুলি ধারণ করে? আমি এটি চেষ্টা করতে পারেন। আমি ইচ্ছা করি তাদের ডিফল্টরূপে কিছুটা বেশি বুদ্ধিমান সেটআপ ছিলো বলে মনে হয় তারা মনে করে যে আপনি যে কোনও জায়গায় আমদানি করা একটি বড় ফাইলের মধ্যে সমস্ত জেএসকে গ্লোব করবেন।
কেনি গ্রান্ট

বিজোড়, আমি স্প্রোককেটস পাই: ফাইলটি ব্যবহার //= require_tree ./globalকরি না তবে ফাইলনটফাউন্ড ত্রুটি, তবে আমি যদি রেলগুলি ৩.২.১২ ব্যবহার করি তবে তা নয় //= require_directory ./global
কিউস

2
দেখে মনে হচ্ছে আপনি অনেক স্ক্রিপ্ট ট্যাগ দিয়ে শেষ করবেন। আমি ভেবেছিলাম সম্পদ পাইপলাইনের সাথে লক্ষ্যটি কি কেবল একটি স্ক্রিপ্ট ট্যাগ থাকা উচিত? আমি কেবল জাভাস্ক্রিপ্টগুলি লিখব যাতে তারা পৃষ্ঠা-নির্দিষ্ট থাকে।
জিগি

1
আমি ভাবছি, আমি বুঝতে পেরেছি. অতিরিক্ত স্ক্রিপ্ট ট্যাগগুলি এড়িয়ে যাওয়া পৃষ্ঠার লোড সময়ের জন্য বেশ গুরুত্বপূর্ণ।
জিগি

12

এই উত্তরগুলি আমাকে এক টন সহায়তা করেছে! কেউ যদি আরও কিছু চান ...

  1. আপনি জাভাস্ক্রিপ্টগুলি প্রিম্পম্পাইল করতে চাইলে তা প্রকাশের মধ্যে রাখতে হবে। তবে, আপনার যদি প্রতিটি জাভাস্ক্রিপ্ট ফাইলের প্রয়োজন হয় application.js.coffeeতবে প্রতিবার যখনই কোনও ভিন্ন পৃষ্ঠায় নেভিগেট করবেন তখন সমস্ত জাভাস্ক্রিপ্টগুলি লোড হবে এবং পৃষ্ঠা-নির্দিষ্ট জাভাস্ক্রিপ্টগুলি করার উদ্দেশ্যটি পরাজিত হবে।

অতএব, আপনার নিজের ম্যানিফেস্ট ফাইলটি তৈরি করতে হবে (উদাহরণস্বরূপ speciifc.js) যা সমস্ত পৃষ্ঠা-নির্দিষ্ট জাভাস্ক্রিপ্ট ফাইলের প্রয়োজন হবে। এছাড়াও, require_treeথেকে পরিবর্তন করুনapplication.js

অ্যাপ্লিকেশন / সম্পদ / JavaScripts / application.js

//= require jquery
//= require jquery_ujs
//= require_tree ./global

অ্যাপ্লিকেশন / সম্পদ / JavaScripts / specific.js

//= require_tree ./specific

তারপরে আপনার environments/production.rbকনফিগারেশন বিকল্পের সাথে পূর্বনির্ধারিত তালিকায় এই ম্যানিফেস্টটি যুক্ত করুন,

config.assets.precompile += %w( specific.js )

সম্পন্ন! সমস্ত ভাগ করা জাভাস্ক্রিপ্ট যা সর্বদা লোড করা উচিত সেগুলি app/assets/javascripts/globalফোল্ডারে এবং পৃষ্ঠায় বর্ণালী জাভাস্ক্রিপ্টগুলিতে রাখা হবে app/assets/javascripts/specific। আপনি পছন্দ মতো পৃষ্ঠা থেকে নির্দিষ্ট জাভাস্ক্রিপ্টগুলি কল করতে পারেন

<%= javascript_include_tag "specific/whatever.js" %> //.js alচ্ছিক।

এটি যথেষ্ট, তবে আমি javascript_include_tag params[:controller]খুব ব্যবহার করতে চাই । আপনি যখন নিয়ন্ত্রক তৈরি করেন, তখন app/assets/javascriptsউল্লিখিত অন্যান্য ব্যক্তির মতো একটি সম্পর্কিত কফিসিপি ফাইল তৈরি করা হয় । সত্যিকারের নিয়ামক-নির্দিষ্ট রয়েছে জাভাস্ক্রিপ্ট রয়েছে, যখন ব্যবহারকারী নির্দিষ্ট নিয়ামক দৃশ্যে পৌঁছালেই লোড হয় are

সুতরাং আমি অন্য ম্যানিফেস্ট তৈরি controller-specific.js

অ্যাপ্লিকেশন / সম্পদ / JavaScripts / নিয়ামক-specific.js

//= require_directory .

এটিতে কন্ট্রোলারগুলির সাথে সম্পর্কিত সমস্ত স্বয়ংক্রিয়ভাবে উত্পন্ন কফিস্ক্রিপ্ট অন্তর্ভুক্ত থাকবে। এছাড়াও, আপনি এটি পূর্বনির্ধারিত তালিকায় যুক্ত করতে হবে।

config.assets.precompile += %w( specific.js controller-specific.js )


বিস্তারিত উত্তরের জন্য অনেক ধন্যবাদ। আমি এই লাইন কোথায় রাখা উচিত javascript_include_tag params[:controller]। বর্তমানে আমার application.html.erb এর এই লাইন রয়েছে javascript_include_tag 'application'। আমি কি অন্য লাইনের সাথে এটি প্রতিস্থাপন করব?
সিংহ

1
এছাড়াও, আমি কি এই লাইনটি <%= javascript_include_tag "specific/whatever.js" %>একটি content_for :headerব্লকে রেখে দেব?
সিংহ

1
এটি আমার কাছে বিরল যা আপনাকে জড়িত করা উচিত config.assets.precompileapp/assets/javascripts/*.jsপ্রাক্পম্পাইল সব কিছুই স্বয়ংক্রিয়ভাবে হয় না?
অ্যালেক্সচাফি

@ অ্যালেক্সচাফি কেবল স্বয়ংক্রিয়ভাবে উপলব্ধ ফাইলগুলি হ'ল application.cssএবং application.js। অন্যকে হয় অন্য ফাইলগুলিতে অন্তর্ভুক্ত করতে হবে, বা ব্যবহার করে তালিকাবদ্ধ করতে হবে config.assets.precompileএখানে আরও পড়ুন
সুং চ

প্রকাশ্য ঘোষণাটি সরানো হয়েছে moved আমি রেল চালাচ্ছি 4.2.0। এবং production.rb ফাইলে এই মন্তব্যটি পাওয়া: # config.assets.precompileএবং config.assets.versionসরানো হয়েছে থেকে কনফিগ / initializers / assets.rb
কার্ট

11

আমি নিম্নলিখিতটি পছন্দ করি ...

আপনার application_helper.rb ফাইলে

def include_javascript (file)
    s = " <script type=\"text/javascript\">" + render(:file => file) + "</script>"
    content_for(:head, raw(s))
end

এবং তারপরে আপনার নির্দিষ্ট দৃশ্যে (অ্যাপ্লিকেশন / দর্শন / বই / সূচক html.erb এই উদাহরণে)

<% include_javascript 'books/index.js' %>

... আমার জন্য কাজ করে বলে মনে হয়.


9

আপনি যদি সম্পদ পাইপলাইন বা ব্যবহার করতে না চান প্রয়োজনীয় পৃষ্ঠা সুনির্দিষ্ট জাভাস্ক্রিপ্ট (আমি সহানুভূতিশীল) পেতে সহজ চারপাশের জটিল কাজগুলি , তবে সবচেয়ে সহজ এবং সর্বাধিক শক্তিশালী উপায়, যা উপরের উত্তরগুলির মতো একই অর্জন করে তবে কম কোড সহ কেবলমাত্র ব্যবহার করুন:

<%= javascript_include_tag "my_javascipt_file" %>

দ্রষ্টব্য: এটি ব্যবহারের উত্তরগুলির তুলনায় ট্যাগ অন্তর্ভুক্ত আরও একটি http অনুরোধের প্রয়োজন content_for :head


javascript_include_tagঠিক আমি যা খুঁজছিলাম ঠিক তা ছিল, এজেপি চিয়ার্স
টম ম্যাকেনজি

আপনি "আমার_ জাভাস্কিপ্ট_ফাইল" কোথায় রাখবেন? সম্পদ / জাভাস্ক্রিপ্টে? তবে যদি তা হয়, তবে //= require .এটি অ্যাপ্লিকেশন.জেএস-এ কোনও স্বয়ংক্রিয়ভাবে উঠবে না ?
কিউস

@ লিনাস হ্যাঁ, //= require .আপনার স্ক্রিপ্টের কোনও পৃষ্ঠায় সেই স্ক্রিপ্টটি নিয়ে আসবে যাতে আপনাকে কেনি গ্রান্ট (ব্যবহার //= require_tree ./global) বা বিজেগের পরামর্শ মতো কিছু করতে হবে ।
এজেপি

1
এটি আমার জন্য এ পর্যন্ত সবচেয়ে সহজ পদ্ধিতি হল পদ্ধতি দ্বারা ছিল, আমি পরিবর্তন //= require_tree .করতে //= require_directory .application.js এবং তারপর সম্পদ \ JavaScripts একটি উপ-ডিরেক্টরিটি নির্মিত হত। নোট করুন যে আপনাকে নতুন ডিরেক্টরিটি কনফিগার করতে হবে \ আরম্ভকারীদের \ সম্পদ.আরবিতে আপনার জেএসটি পূর্বনির্মাণ করতে লাইনটি যুক্ত করে:Rails.application.config.assets.precompile += %w( new_dir/js_file.js )
জোনসি


3

আমার বোধগম্যতা হ'ল সম্পদ পাইপলাইনটি আপনার সমস্ত জেএস একসাথে এক (মিনিডযুক্ত) ফাইলে ম্যাসেজ করে পৃষ্ঠা লোড-টাইম হ্রাস করা বোঝায়। যদিও এটি পৃষ্ঠতলটিতে বিতর্কিত মনে হতে পারে তবে এটি আসলে এমন একটি বৈশিষ্ট্য যা সি এবং রুবির মতো জনপ্রিয় ভাষায় ইতিমধ্যে বিদ্যমান। "অন্তর্ভুক্ত" ট্যাগগুলির মতো জিনিসগুলি কোনও ফাইলের একাধিক অন্তর্ভুক্তি রোধ এবং প্রোগ্রামারদের তাদের কোডটি সংগঠিত করতে সহায়তা করে। আপনি যখন সি তে একটি প্রোগ্রাম লিখে এবং সংকলন করেন, তখন আপনার চলমান প্রোগ্রামের প্রতিটি অংশে সমস্ত কোড উপস্থিত থাকে, তবে সেই কোডটি ব্যবহার করার সময় পদ্ধতিগুলি কেবল মেমরিতে লোড হয়। এক অর্থে, সংকলিত প্রোগ্রামে কোডটি খুব সুন্দরভাবে মডুলার হওয়ার গ্যারান্টি সহ কিছু অন্তর্ভুক্ত করে না। আমরা আমাদের প্রোগ্রামগুলি সেভাবে লিখে কোডটিকে মডুলার করি এবং অপারেটিং সিস্টেমটি প্রদত্ত লোকালটির জন্য আমাদের প্রয়োজনীয় জিনিসগুলি এবং পদ্ধতিগুলিকে কেবল মেমরিতে লোড করে দেয়। "পদ্ধতি-নির্দিষ্ট অন্তর্ভুক্তি" এর মতো জিনিস কি আছে? যদি আপনার রেল অ্যাপ্লিকেশন প্রশান্ত থাকে তবে মূলত এটি যা আপনি জিজ্ঞাসা করছেন।

আপনি যদি আপনার জাভাস্ক্রিপ্টটি লিখেন যাতে এটি পৃষ্ঠায় এইচটিএমএল উপাদানগুলির আচরণকে বাড়িয়ে তোলে, তবে সেই ফাংশনগুলি ডিজাইন দ্বারা 'পৃষ্ঠা-নির্দিষ্ট'। যদি এমন কিছু জটিল কোড থাকে যা আপনি এমনভাবে লিখেছিলেন যে এটি এর প্রসঙ্গ নির্বিশেষে কার্যকর করে তুলবে, সম্ভবত সেই কোডটিকে এইচটিএমএল উপাদানের সাথে আবদ্ধ করার বিষয়টি বিবেচনা করুন (আপনি গার্বার-আইরিশ পদ্ধতিতে বর্ণিত হিসাবে বডি ট্যাগ ব্যবহার করতে পারেন) )। যদি কোনও ফাংশন শর্তসাপেক্ষে কার্যকর করা হয় তবে পারফরম্যান্স সম্ভবত সমস্ত অতিরিক্ত স্ক্রিপ্ট ট্যাগের চেয়ে ছোট হবে।

আমি পেলোমা রত্নটি ব্যবহার করার কথা ভাবছি , যেমন রেল অ্যাপস প্রকল্পে বর্ণিত । তারপরে আপনি প্যালোমা কলব্যাকের পৃষ্ঠা-নির্দিষ্ট ফাংশনগুলি অন্তর্ভুক্ত করে আপনার জাভাস্ক্রিপ্ট পৃষ্ঠা-নির্দিষ্ট করতে পারেন:

Paloma.callbacks['users']['new'] = function(params){
    // This will only run after executing users/new action
    alert('Hello New Sexy User');
}; 

আপনি রেল ব্যবহার করেন, তাই আমি জানি যে আপনি রত্নকে ভালোবাসেন :)


3

আপনার জেএস বা সিএসএস ফাইলগুলি সম্পদ পাইপলাইনের বাইরে লোড করা উচিত নয় কারণ আপনি গুরুত্বপূর্ণ বৈশিষ্ট্যগুলি হারিয়ে ফেলেন যা রেলগুলি দুর্দান্ত করে তোলে। এবং আপনার আর একটি রত্নের দরকার নেই। আমি যতটা সম্ভব রত্ন ব্যবহারে বিশ্বাস করি এবং রত্ন ব্যবহার করা এখানে প্রয়োজনীয় নয়।

আপনি যা চান তা "কন্ট্রোলার নির্দিষ্ট জাভাস্ক্রিপ্ট" হিসাবে পরিচিত ("নীচে অ্যাকশন নির্দিষ্ট জাভাস্ক্রিপ্ট অন্তর্ভুক্ত করা হয়েছে) এটি আপনাকে একটি নির্দিষ্ট কনট্রোলারের জন্য একটি নির্দিষ্ট জাভাস্ক্রিপ্ট ফাইল লোড করতে দেয়। আপনার জাভাস্ক্রিপ্টকে একটি ভিউয়ের সাথে সংযুক্ত করার চেষ্টা করা এক ধরণের .. পিছনে এবং এমভিসি ডিজাইন প্যাটার্নটি অনুসরণ করে না You আপনি এটিকে আপনার নিয়ন্ত্রণকারী বা আপনার কন্ট্রোলারগুলির অভ্যন্তরে ক্রিয়াগুলির সাথে যুক্ত করতে চান।

দুর্ভাগ্যক্রমে, যে কোনও কারণেই, রেল ডেভস সিদ্ধান্ত নিয়েছে যে ডিফল্টরূপে, প্রতিটি পৃষ্ঠা আপনার সম্পত্তি ডিরেক্টরিতে অবস্থিত প্রতিটি জেএস ফাইল লোড করবে। তারা কেন ডিফল্টরূপে "কন্ট্রোলার নির্দিষ্ট জাভাস্ক্রিপ্ট" সক্ষম করার পরিবর্তে এটি করার সিদ্ধান্ত নিয়েছে তা আমি কখনই জানতে পারি না। এটি অ্যাপ্লিকেশন.জেএস ফাইলের মাধ্যমে সম্পন্ন হয়, এতে নিম্নলিখিত কোডের লাইনটি ডিফল্টরূপে অন্তর্ভুক্ত থাকে:

//= require_tree .

এটি একটি নির্দেশিকা হিসাবে পরিচিত । সম্পদ / জাভাস্ক্রিপ্ট ডিরেক্টরিতে প্রতিটি জেএস ফাইল লোড করতে স্প্রোককেটগুলি এটি ব্যবহার করে। ডিফল্টরূপে, স্প্রোককেটগুলি স্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশন.জে এবং লোড করে দেয়।

দ্রষ্টব্য: আপনি যখন স্ক্যাফোল্ড করে (আপনি যদি ভারা না করে থাকেন তবে এখন শুরু করার ভাল সময়), রেলগুলি স্বয়ংক্রিয়ভাবে আপনার জন্য একটি কফি ফাইল উত্পন্ন করে , সেই স্ক্যাফোোল্ডের নিয়ামকের জন্য। যদি আপনি এটি কোনও কফি ফাইলের পরিবর্তে মানক জেএস ফাইল তৈরি করতে চান তবে আপনার জেমফাইলে ডিফল্টরূপে সক্ষম কফি রত্নটি সরিয়ে ফেলুন এবং এর পরিবর্তে আপনার স্ক্যাফোল্ড জেএস ফাইল তৈরি করবে।

ঠিক আছে, সুতরাং "কন্ট্রোলার নির্দিষ্ট জাভাস্ক্রিপ্ট" সক্ষম করার প্রথম পদক্ষেপটি হ'ল আপনার অ্যাপ্লিকেশন.জেএস ফাইল থেকে প্রয়োজনীয়_ট্রি কোডটি সরিয়ে ফেলা, বা আপনার যদি এখনও বিশ্বব্যাপী জেএস ফাইলের প্রয়োজন হয় তবে এটি আপনার সম্পদ / জাভাস্ক্রিপ্ট ডিরেক্টরিতে একটি ফোল্ডারে পরিবর্তন করুন। অর্থাৎ,

//= require_tree ./global

পদক্ষেপ 2: আপনার কনফিগারেশন / আরম্ভকারী / সম্পদ.rb ফাইলটিতে যান এবং নিম্নলিখিতগুলি যুক্ত করুন:

%w( controllerone controllertwo controllerthree ).each do |controller|
  Rails.application.config.assets.precompile += ["#{controller}.js", "#{controller}.css"]
end

আপনি যে কন্ট্রোলারের নাম সন্নিবেশ করান।

পদক্ষেপ 3: আপনার এপ্লিকেশন। Html.erb ফাইলটিতে জাভাস্ক্রিপ্ট_মিলন_ট্যাগটি প্রতিস্থাপন করুন (প্যারামগুলি নোট করুন:: নিয়ামক] অংশ:

<%= javascript_include_tag 'application', params[:controller], 'data-turbolinks-track': 'reload' %>

আপনার সার্ভার পুনরায় আরম্ভ করুন এবং ভায়োলা! আপনার স্ক্যাফোল্ডের সাহায্যে জেএস ফাইলটি তৈরি করা হয়েছিল কেবল তখনই লোড হবে যখন সেই নিয়ামককে ডাকা হয়।

আপনার নিয়ামক , আইই / নিবন্ধ / নতুন কোনও নির্দিষ্ট অ্যাকশনে একটি নির্দিষ্ট জেএস ফাইলটি লোড করা দরকার ? পরিবর্তে এটি করুন:

application.html.erb :

<%= javascript_include_tag "#{controller_name}/#{action_name}" if AppName::Application.assets.find_asset("#{controller_name}/#{action_name}") %>

কনফিগারেশন / আরম্ভকারী / সম্পদ.আরবি :

config.assets.precompile += %w(*/*)

তারপরে আপনার সম্পদ / জাভাস্ক্রিপ্টস ফোল্ডারে যেমন আপনি নিয়ন্ত্রণ করছেন তেমন নামের সাথে একটি নতুন ফোল্ডার যুক্ত করুন এবং আপনার ক্রিয়াকলাপের ভিতরে js ফাইলটি একই নামের সাথে রাখুন। এরপরে এটি সেই নির্দিষ্ট ক্রিয়ায় লোড হবে।


1

ঠিক আছে তাই এটি সর্বকালের সবচেয়ে খারাপ কাজের মতো তবে আমি একটি নিয়ামক পদ্ধতি তৈরি করি যা কেবলমাত্র জেএস ফাইলটি রেন্ডার করে

নিয়ামক

def get_script
   render :file => 'app/assessts/javascripts/' + params[:name] + '.js'
end
def get_page
   @script = '/' + params[:script_name] + '.js?body=1'
   render page
end

দৃশ্য

%script{:src => @script, :type => "text/javascript"}

যদি কোনও কারণে আমরা এটি করতে চাই না তবে আমাকে জানান।


1

জেএস যুক্ত করার পছন্দের উপায়টি ফুটারে রয়েছে, সুতরাং আপনি এইভাবে করতে পারেন:

show.html.erb:

<% content_for :footer_js do %>
   This content will show up in the footer section
<% end %>

লেআউট / application.html.erb

<%= yield :footer_js %>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.