5 টি পাগল: টার্বো-লিঙ্কগুলি সহ কীভাবে $ (নথি)। প্রস্তুত () ব্যবহার করবেন)


85

টারবোলিংকগুলি এখানে এবং এখানে$(document).ready() আলোচিত হিসাবে প্রাথমিক লোডের পাশাপাশি সমস্ত পৃষ্ঠা ভিজিটগুলিতে গুলি করা থেকে সাধারণ ইভেন্টগুলিকে বাধা দেয় । লিঙ্কযুক্ত উত্তরের কোনও সমাধানই যদিও রেল 5 এর সাথে কাজ করে না। পূর্ববর্তী সংস্করণগুলির মতো আমি কীভাবে প্রতিটি পৃষ্ঠায় ভিজিট করতে কোড চালাতে পারি?

উত্তর:


170

readyইভেন্টটি শোনার পরিবর্তে আপনার প্রতিটি পৃষ্ঠায় দেখার জন্য টারবোলিংকস দ্বারা বরখাস্ত হওয়া ইভেন্টে প্রবেশ করতে হবে।

দুর্ভাগ্যক্রমে, টারবোলিংকস 5 (যা সংস্করণ 5 টি রেলের মধ্যে প্রদর্শিত হয়) আবার লিখিত হয়েছে, এবং টারবোলিংকের আগের সংস্করণগুলির মতো ইভেন্টের নাম ব্যবহার করে না, যার ফলে উল্লিখিত উত্তরগুলি ব্যর্থ হয়েছে। টারবোলিংকগুলি শুনতে এখন যা কাজ করে তা হল : লোড ইভেন্টটি এরকম:

$( document ).on('turbolinks:load', function() {
  console.log("It works on each visit!")
})

4
হ্যাঁ. এখানেও ব্যাখ্যা করা হয়েছে। গাইড.আরবিওনরইলস.আর । 5.2 পৃষ্ঠা পরিবর্তন ইভেন্ট পরীক্ষা করুন।
ইন্দিকা কে

4
টারবোলিংকস: স্থানীয়ভাবে আমার জন্য আগুনের ভার, তবে হিরোকুতে নয়। আমি আমার সংকলিত জেএস সম্পদে আমার কাস্টম জাভাস্ক্রিপ্ট কোডটি দেখছি, তবে ইভেন্টটি গুলি চালাচ্ছে না।
psparrow

4
রেল ডক যা বলেছেন তা সত্ত্বেও, আমি on('ready turbolinks:load')অন্যথায় ব্যবহার করছি কিছু পৃষ্ঠায় আমার কিছু সমস্যা আছে
সিরিল ডুচন-ডরিস

4
হাই সাইরিল, আমারও একই সমস্যা হচ্ছে, অর্থাত্ প্রাথমিক পৃষ্ঠা লোডের পাশাপাশি টার্বোলিংকস: লোডে ট্রিগার করা দরকার। আমি এসও, স্ট্যাকওভারফ্লো . com / প্রশ্নস / ৪১৪১১49৯6//২ এ এ সম্পর্কে একটি প্রশ্ন জিজ্ঞাসা করেছি । এটি কেন এমন হয় তা সম্পর্কে আপনার আরও কোনও অন্তর্দৃষ্টি আছে? আপনি কি jquery- টারবোলিংক ব্যবহার করছেন (আমি)। কেবলমাত্র ভাল জিনিসটি এটি নিশ্চিত করে যে আপনার কোডটি আদর্শবান।
ওব্রোমিওস

4
এটি কি রেলের 6 এর জন্য আলাদা?
স্টিভেক

60

নেটিভ জেএস:

document.addEventListener("turbolinks:load", function() {
    console.log('It works on each visit!');
});

11

রেল 5 এ সবচেয়ে সহজ সমাধানটি হ'ল:

$(document).on('ready turbolinks:load', function() {});

পরিবর্তে $(document).ready। একটি যাদুমন্ত্র মত কাজ করে.


10
readyতালিকায় যুক্ত করবেন না , না হলে ফাংশনটি দু'বার কার্যকর করা হবে। Github.com/turbolinks/turbolinks/#observing-navication-events যেমন বলেছে, আপনার এটি করা উচিত: javascript $(document).ready(function() { $(document).on('turbolinks:load', function() {} ) })
জিয়াওহুই ঝাং

@ শিয়াওহুইঝাং আপনি কি নিশ্চিত যে এটি কাজ করবে ???? কারণ যদি $(document).readyট্রিগার হয়ে যায়, তবে কমপক্ষে আমার নিজের পরিস্থিতিতে, আমার প্রয়োজন হবে নাturbolinks:load
মিলাদ।নজারি

@ শিয়াওহুইজ্যাং যদি আপনার স্ক্রিপ্টটি টার্বলিংকস সহ কোনও পৃষ্ঠায় এবং বিনা কোনও পৃষ্ঠায় কাজ করতে হয় তবে এটি পৃষ্ঠায় ছাড়া কাজ করবে না, কারণ এটি টারবোলিংকসের দরকার হবে: কোডটি চালানোর জন্য লোড ইভেন্টটি
এসকেঞ্জার

@ এস্কানএক্সআর এটি উভয়ই কাজ করে, আপনি এটি ব্যবহার করে দেখতে পারেন। কারণ টার্বোলিংকস সর্বদা "টার্বোলিংকস: লোড" ইভেন্টটি ট্রিগার করে যখনই টারবোলিংক পৃষ্ঠা হয় বা না।
জিয়াওহুই জাং

4
@ শিয়াওহুইঝ্যাং আমি টার্বোলিংকস 5 দিয়ে চেষ্টা করেছি, এটি কার্যকর হয়নি। যদি পৃষ্ঠায় টারবোলিংকস অক্ষম করা থাকে তবে কেবল readyইভেন্টটি ট্রিগার করা হবে। টার্বোলিংকস থাকলে, কোডটি
দুটিবার কল করা

9

এটি আমার সমাধান, ওভাররাইড jQuery.fn.ready, তারপরে $(document).readyকোনও পরিবর্তন ছাড়াই কাজ করে:

jQuery.fn.ready = (fn)->
  $(this).on 'turbolinks:load', fn

এটাই আমার দরকার ছিল। এটি বহিরাগত পাঠাগারগুলির জন্য কাজ করে যা documentকলব্যাকগুলিতেও নির্ভর করে । ডাউনটা কেন? যতক্ষণ না পুরো অ্যাপ্লিকেশন জুড়ে টার্বলিংক ব্যবহার করা হয় ততক্ষণ এটি নিরাপদ থাকা উচিত?
ডিলান ভ্যান্ডার বার্গ

3

(কফিসক্রিপ্টের জন্য)

আমি ব্যবহার করি: $(document).on 'turbolinks:load', ->

পরিবর্তে: $(document).on('turbolinks:load', function() {...})


আমি এটি করেছি এবং এখনও আমি এই সমস্যাটি @ ইয়ে হিসাবে বলেছি: github.com/mkhairi/matoryize-sass/issues/130 । জেএস বা কফি ব্যবহার করা আসলে কোনও তাত্পর্যপূর্ণ করে না, কমপক্ষে আমার পক্ষে নয়।
এলেকসেন্টুরিও

4
হাই লোকেরা, সাধারণভাবে এই উত্তরটিতে কী ভুল?
15:25 এ atw

আমার অনুমান যে এটি কফিস্ক্রিপ্ট এবং নেটিভ জাভাস্ক্রিপ্ট নয়? আমি এটিকে একটি +1 দিয়েছি কারণ এটি ঠিক আমি যা করছি এবং এটি আমার জন্য কাজ করে (আমার কফিসিপি ফাইলটিতে)
অ্যারোনা

হ্যাঁ, এটি কফিসক্রিপ্টের জন্য :)। আমার ভুল এটি নির্দিষ্ট করা হয়নি
fcabanasm

2

সমাধানটি আমার পক্ষে কাজ করে এমনটি এখানে থেকে :

  1. ইনস্টল gem 'jquery-turbolinks'

  2. এই অ্যাপ্লিকেশনটিতে এই কফি ফাইলটি যুক্ত করুন: https://github.com/turbolinks/turbolinks/blob/master/src/turbolinks/compatibility.coffee

  3. এটির নাম দিন টারবোলিংকস - সামঞ্জস্যতা কফি

  4. এপ্লিকেশন.জেএস এ

    //= require jquery
    //= require jquery_ujs
    //= require jquery.turbolinks
    //= require turbolinks
    //= require turbolinks-compatibility
    

productionVর্ষা সম্পর্কে কি ? আপনি এটি পরীক্ষা করে দেখেছেন? কিছু লোক এটিকে বলছেন যে এটি developmentমোডে ঠিকঠাক কাজ করে।
alexventuraio

6
মণি অবমূল্যায়ন করা হয়েছে
মরো 15

1

যদিও আমরা এই সত্যিই শীতল রত্নটির সমাধানের অপেক্ষায় রয়েছি, আমি নিম্নলিখিতটি সংশোধন করে এগিয়ে যেতে সক্ষম হয়েছি;

  addCallback: (callback) ->
if $.turbo.isReady
  callback($)
$document.on 'turbo:ready', -> callback($)

প্রতি:

  addCallback: (callback) ->
if $.turbo.isReady
  callback($)
$document.on 'turbolinks:load', -> callback($)

এটি কী সমাধান করে না তা আমি এখনও অবগত নই, তবে প্রাথমিক পরিদর্শনে এটি ভালভাবে কাজ করেছে বলে মনে হয়েছিল।


0

হালকা ওজন মণি jquery- টারবোলিংক ব্যবহার করুন

এটি $(document).ready()বিদ্যমান কোড পরিবর্তন না করে টার্বলিংকসের সাথে কাজ করে।

বিকল্পভাবে, আপনি এর মধ্যে $(document).ready()একটিতে পরিবর্তন করতে পারেন :

$(document).on('page:fetch', function() { /* your code here */ });

$(document).on('page:change', function() { /* your code here */ });

আপনার পরিস্থিতিতে কোনটি আরও উপযুক্ত তার উপর নির্ভর করে।


jquery-টারবোলিংকস এখনও টারবোলিংকস সমর্থন করে না 5 github.com/kossnocorp/jquery.turbolinks/issues/56
অ্যান্ড্রুএইচ

আপনি ঠিক বলেছেন, @ অ্যান্ড্রুএইচ! আশা করি, শীঘ্রই সমর্থন যোগ করা হবে।
ভাদিম

4
Jquery- টারবোলিংকস মণি অবচিত করা হয়েছে।
নাথান ভি

0

খাঁটি আধুনিক জেএস:

const onLoad = () => {
  alert("works")
}

document.addEventListener("load", onLoad)
document.addEventListener("turbolinks:load", onLoad)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.