রেলস 4: টার্বো-লিঙ্কগুলি সহ কীভাবে $ (নথি) .ডিডি () ব্যবহার করবেন


422

জেএস ফাইলগুলি "রেলপথের পথ" সংগঠিত করার চেষ্টা করার সময় আমি আমার রেলস 4 অ্যাপ্লিকেশনটিতে একটি সমস্যা পেয়েছিলাম ran তারা আগে বিভিন্ন দর্শন ছড়িয়ে ছিটিয়ে ছিল। আমি এগুলিকে পৃথক ফাইলে সংগঠিত করেছি এবং সম্পদ পাইপলাইন দিয়ে তাদের সংকলন করেছি। যাইহোক, আমি কেবল শিখেছি যে টার্বো-লিঙ্কিং চালু হওয়ার পরে jQuery এর "প্রস্তুত" ইভেন্টটি পরবর্তী ক্লিকগুলিতে আগুন দেয় না। আপনি যখন প্রথমবার কোনও পৃষ্ঠা লোড করবেন তখন এটি কাজ করে। তবে আপনি যখন কোনও লিঙ্ক ক্লিক করেন, তখন অভ্যন্তরের কোনও কিছুই ready( function($) {কার্যকর হবে না (কারণ পৃষ্ঠাটি আসলে আবার লোড হয় না)। ভাল ব্যাখ্যা: এখানে

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

উত্তর:


554

আমি এখানে যা করছি ... কফি স্ক্রিপ্ট:

ready = ->

  ...your coffeescript goes here...

$(document).ready(ready)
$(document).on('page:load', ready)

শেষ লাইনটি পৃষ্ঠা লোডের জন্য শোনায় যা টার্বো লিঙ্কগুলি ট্রিগার করবে।

সম্পাদনা করুন ... জাভাস্ক্রিপ্ট সংস্করণ যুক্ত করা (প্রতি অনুরোধে):

var ready;
ready = function() {

  ...your javascript goes here...

};

$(document).ready(ready);
$(document).on('page:load', ready);

2 সম্পাদনা করুন ... রেল 5 এর জন্য (টারবোলিংকস 5) page:loadহয়ে যায় turbolinks:loadএবং এমনকি প্রাথমিক লোডে তা বহিস্কার করা হবে। সুতরাং আমরা কেবল নিম্নলিখিতটি করতে পারি:

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

  ...your javascript goes here...

});

3
এটা কি কফি স্ক্রিপ্ট? আমি এখনও এটি শিখিনি। আপনার উদাহরণের সমান কোনও জেএস বা জিকুয়ারি আছে?
এমারসন্থিস

6
মনে বুঝেছি: var ready = function() { ... } $(document).ready(ready) $(document).on('page:load', ready)সেখানে কোনো উদ্বেগের বিষয় উভয় .ready এবং 'page:load'আলোড়ন সৃষ্টি পেয়ে?
এমারসন্থিস

4
@ এমারসন একটি স্পষ্ট নাম সহ একটি খুব দরকারী ওয়েবসাইট আছে: js2coffee.org
মিঃ যোশিজি

16
আমি নিশ্চিত করতে পারি যে প্রস্তুত ফাংশনটি দু'বার কল হয় না । যদি একটি হার্ড রিফ্রেশ আছে, শুধুমাত্রready ঘটনা বহিস্কার করা হয়। যদি একটি turbolinks লোড আছে, শুধুমাত্রpage:load ঘটনা বহিস্কার করা হয়। উভয়ের পক্ষে readyএবং page:loadএকই পৃষ্ঠায় বরখাস্ত করা অসম্ভব ।
খ্রিস্টান

7
অবগতির জন্য এছাড়াও আপনি একাধিক ইভেন্টের জন্য এই আবেদন করতে পারেন page:loadএবং readyপ্রথম argumet জন্য একটি স্থান বিভাজিত স্ট্রিং অন্তর্ভুক্ত করে। $(document).on('page:load ready', ready);দ্বিতীয় যুক্তিটি কেবল একটি ফাংশন যা readyএই উত্তরটির উদাহরণ অনুসরণ করে নামকরণ হয় to
আহ্নবিজক্যাড

235

আমি এই সমস্যাটি সমাধানের জন্য অন্য একটি বিকল্প সম্পর্কে শিখেছি। আপনি যদি মণিটি লোড করেন তবেjquery-turbolinks এটি রেলস টার্বলিংকস ইভেন্টগুলিকে ইভেন্টগুলিতে আবদ্ধ করবে document.readyযাতে আপনি আপনার জিক্যুরিটি স্বাভাবিক উপায়ে লিখতে পারেন। আপনি ঠিক jquery.turbolinksপরে jqueryjs ম্যানিফেস্ট ফাইল (ডিফল্ট অনুসারে application.js) যোগ করুন।


2
অান্তরিক ধন্যবাদ! ঠিক আমার যা প্রয়োজন রেলপথ। কনভেনশন।
জেরেমি বেকার

6
ডকুমেন্টেশনের সাথে মিল রেখে আপনার //= require jquery.turbolinksম্যানিফেস্টে যুক্ত হওয়া উচিত (যেমন অ্যাপ্লিকেশন.জেএস)।
apocryphalauthor

1
@ উইল্ডমনকি দুটি উত্তর পারস্পরিক একচেটিয়া। 0.o
ahnbizcad

1
আপনি এই রত্নটি যুক্ত করার সময় আপনাকে আপনার রেল সার্ভারটি পুনরায় চালু করতে হবে
টবি 1 কেনোবি

21
দয়া করে নোট করুন যে 4 রেলগুলি এখন টার্বোলিংকস 5-এ ডিফল্ট হচ্ছে যা ঘুরে দেখা যায় jquery.turbolink দ্বারা সমর্থিত নয়! দেখুন github.com/kossnocorp/jquery.turbolinks/issues/56
সেবাস্টিয়ান

201

সাম্প্রতিককালে আমি এটির সাথে সম্পর্কিত সবচেয়ে সহজ এবং বোঝার সহজ উপায় পেয়েছি:

$(document).on 'ready page:load', ->
  # Actions to do

অথবা

$(document).on('ready page:load', function () {
  // Actions to do
});

সম্পাদনা করুন
যদি আপনার ইভেন্টগুলিতে আবদ্ধ থাকে তবে documentনিশ্চিত হয়ে নিন যে আপনি এগুলি readyফাংশনের বাইরে সংযুক্ত করেছেন , তা না হলে তারা প্রতিটি page:loadইভেন্টে পুনরায় প্রত্যাবর্তন করবে (একই ফাংশনগুলি একাধিকবার চালানো হতে পারে)। উদাহরণস্বরূপ, আপনার যদি এর মতো কোনও কল থাকে:

$(document).on 'ready page:load', ->
  ...
  $(document).on 'click', '.button', ->
    ...
  ...

এগুলি readyএটিকে ফাংশন থেকে বাইরে নিয়ে যান :

$(document).on 'ready page:load', ->
  ...
  ...

$(document).on 'click', '.button', ->
  ...

ডেলিগেটড ইভেন্টগুলিতে আবদ্ধ হওয়ার documentদরকার নেই ready


9
এটি পৃথক ready()ফাংশন তৈরির জন্য গৃহীত উত্তরের চেয়ে অনেক সহজ । readyফাংশনের বাইরে ডেলিগ্রেড ইভেন্টগুলি আবদ্ধ করার ব্যাখ্যার জন্য বোনাস আপগেট করে।
খ্রিস্টান

1
এই পদ্ধতির অসুবিধায় যে $(document).on( "ready", handler ), deprecated as of jQuery 1.8. jquery / রেডি
mfazekas

@ দেজি @ এমফাজেকাস আপনি যদি jQuery এর পূর্ববর্তী সংস্করণ ব্যবহার করেন এবং jquery-টারবোলিংকস রত্ন ব্যতীত এই সমাধানটি কি কাজ করবে? বা readyরত্নটি ব্যবহার করে ভাগটি অবৈধ করা হয়েছে?
অহনিবিজ্যাকড

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

3
আপনার সম্ভবত "পৃষ্ঠা: লোড" এর পরিবর্তে "পৃষ্ঠা: পরিবর্তন" ব্যবহার করা উচিত, কারণ পৃষ্ঠাটি সার্ভার থেকে বা ক্লায়েন্ট-সাইড ক্যাশে থেকে লোড হয়েছে কিনা তা পূর্ববর্তীকে বরখাস্ত করা হয়েছে
নাথান লং

91

এটি ডেমোজলুকের সমাধানের মতো তবে সামান্য খাটো: রেল 4 নথিটিতে পাওয়া গেছে

$(document).on 'page:change', ->
  # Actions to do

অথবা

$(document).on('page:change', function () {
  // Actions to do
});

যদি আপনার কাছে বাহ্যিক স্ক্রিপ্টগুলি কল হয় $(document).ready()বা আপনি যদি আপনার বিদ্যমান জাভাস্ক্রিপ্টটি পুনরায় লেখার জন্য বিরক্ত না হয়ে থাকেন তবে এই রত্নটি আপনাকে $(document).ready()টার্বোলিংক্স দিয়ে ব্যবহার চালিয়ে যাওয়ার অনুমতি দেয় : https://github.com/kossnocorp/jquery.turbolinks


79

নতুন রেল গাইড হিসাবে সঠিক পদ্ধতিটি নিম্নলিখিত কাজগুলি করা:

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

বা, কফিস্ক্রিপ্টে:

$(document).on "turbolinks:load", ->
alert "page has loaded!"

ইভেন্টটি শুনবেন না $(document).readyএবং কেবলমাত্র একটি ইভেন্ট বরখাস্ত করা হবে। অবাক হওয়ার কিছু নেই, jquery.turbolinks রত্ন ব্যবহার করার দরকার নেই ।

এটি 4.2 এবং ততোধিক রেলগুলির সাথে কাজ করে, কেবল রেল 5 নয়।


এটা আমার জন্য কাজ চমৎকার। সমাধানের চেষ্টা এখানে: স্ট্যাকওভারফ্লো / প্রশ্ন / 17881384/… তবে কোনও কারণে কাজ হয়নি। এখন আমি টারবোলিংকগুলিতে লোড করছি: পরিবর্তে লোড করুন
ক্রিংকার

1
কেউ কি নিশ্চিত করতে পারেন যে "turbolinks:load"ঘটনাটি 4.2 রেলগুলিতে কাজ করে? turbolinks:ঘটনা উপসর্গ চালু হয় নিউ Turbolinks এবং পাগল 4.2 IIRC যা Turbolinks ব্যবহার ব্যবহার করা হয় না ক্লাসিক । ব্যবহার করার কথা ভাবুন "page:change"যদি "turbolinks:load"আপনার কাজ করে না 5 অ্যাপ্লিকেশন প্রাক পাগল। গাইড.আরবিওনরইলস.অর্গ /v4.2.7/…
এলিয়ট সাইকস

1
@ ইলিয়টসাইকস গাইড আপডেট হয়নি। 4.2 টি কারাগারে এখন টারবোলিংক-ক্লাসিকের পরিবর্তে github.com/turbolinks/turbolinks ব্যবহার করা হয়েছে। এবং যে কোনও ক্ষেত্রে এটি আপনার জেমফাইলে যা নির্দিষ্ট করেছে তার উপর নির্ভর করে। আশা করি আপনি শীঘ্রই
এটির

3
ধন্যবাদ @ vedant1811। লেখার সময়, আমি নিশ্চিত করছি যে একটি নতুন রেলস 4.2.7 অ্যাপ্লিকেশন টার্বোলিংকস 5 (টারবোলিংকস-ক্লাসিক নয়) ব্যবহার করে। বিকাশকারীরা এটি পড়ছেন - ব্যবহৃত টারবোলিংকস সংস্করণটির জন্য আপনার জেমফাইল.লকটি পরীক্ষা করুন। যদি এটি 5.0 এর কম হয় তবে page:changeটার্বোলিংকগুলি ব্যবহার বা আপগ্রেড করুন। এটিও পাওয়া গেছে, কারও কাছে প্রাসঙ্গিক হতে পারে, যেখানে টারবোলিংকস ইভেন্টগুলিকে পুরানো ইভেন্টের নামগুলিতে অনুবাদ করে: github.com/turbolinks/turbolinks/blob/v5.0.0/src/turbolinks/…
এলিয়ট সাইকস

1
না alert "page has loaded!"প্রয়োজন আসলে কলব্যাক ফাংশন দ্বারা চালানো যাবে ইন্ডেন্টযুক্ত হবে?
এমবিগ্রাস

10

দ্রষ্টব্য: একটি পরিষ্কার, অন্তর্নির্মিত সমাধানের জন্য @ এসডিপির উত্তর দেখুন

আমি এটি নীচে ঠিক করেছি:

নিম্নলিখিত অ্যাপ্লিকেশন নির্ভর জেএস ফাইলগুলি অন্তর্ভুক্ত করার ক্রমটি পরিবর্তন করে অন্তর্ভুক্ত করার আগে আপনি আবেদন.js অন্তর্ভুক্ত করেছেন তা নিশ্চিত করুন:

// in application.js - make sure `require_self` comes before `require_tree .`
//= require_self
//= require_tree .

একটি গ্লোবাল ফাংশন সংজ্ঞায়িত করুন যা বাইন্ডিংটি পরিচালনা করে application.js

// application.js
window.onLoad = function(callback) {
  // binds ready event and turbolink page:load event
  $(document).ready(callback);
  $(document).on('page:load',callback);
};

এখন আপনি এই জাতীয় জিনিসগুলি যেমন:

// in coffee script:
onLoad ->
  $('a.clickable').click => 
    alert('link clicked!');

// equivalent in javascript:
onLoad(function() {
  $('a.clickable').click(function() {
    alert('link clicked');
});

2
এটি আপনাকে সবচেয়ে পরিষ্কার বলে মনে হচ্ছে যেহেতু আপনাকে কেবল এটি এক জায়গায় যুক্ত করতে হবে, প্রতিটি কফিসিপি ফাইল নেই। চমৎকার কাজ!
পাইরোস্প্যাড

@ স্লেড তাই এই কথাটি কি এসডিপির রত্ন এবং এই কোডটি ব্যবহার করার পদ্ধতিটি ব্যবহার করবেন? অথবা এটি এমন কোনও উত্তর যা মণি ব্যবহার করে না?
আহনিবিজ্যাকড

এই উত্তরটি ভুলে এসডিপির সমাধানটি ব্যবহার করুন।
স্লেড করুন

@ সলেড কেবলমাত্র এক জায়গায় কল দেয়ার ধারণার সাথে এসডিপির সমাধানটি একত্রিত করা সম্ভব?
আহ্নবিজক্যাড

1
@gwho: হিসাবে আভ্যন্তরীন উৎপাদন এর উত্তর শো, turbolinks পর্যন্ত আঙ্গুলসমূহ readyঘটনা, এর মানে হল আপনি আরম্ভের এর "মান" পথ ব্যবহার করতে পারেন: $(document).ready(function() { /* do your init here */});। সম্পূর্ণ পৃষ্ঠাটি লোড করা হলে আপনার init কোডটি কল করা উচিত (-> টারবোলিংক ছাড়াই) এবং আপনি যখন টারবোলিংকের মাধ্যমে কোনও পৃষ্ঠা লোড করবেন তখন আপনার আরম্ভ কোডটি আবার কার্যকর করা উচিত। টারবোলিংক ব্যবহার করার সময় আপনি যদি কেবল কয়েকটি কোড সম্পাদন করতে চান:$(document).on('page:load', function() { /* init only for turbolinks */});
স্লেড করুন

8

উপরের কোনওটিই আমার পক্ষে কাজ করে না, আমি jQuery এর $ (ডকুমেন্ট) ব্যবহার না করে এটি সমাধান করেছি ready

document.addEventListener("turbolinks:load", function() {
  // do something
});

7
$(document).on 'ready turbolinks:load', ->
  console.log '(document).turbolinks:load'

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



2

"প্রস্তুত" ফাংশনটি সংরক্ষণ এবং ইভেন্টগুলিতে আবদ্ধ করতে কোনও ভেরিয়েবল ব্যবহার না করে আপনি readyযখনই page:loadট্রিগারটি শুরু করবেন তখনই ইভেন্টটি ট্রিগার করতে চাইতে পারেন ।

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

2

জিনিসগুলি দু'বার সম্পাদিত হবে না তা নিশ্চিত করার জন্য আমি এখানে যা করেছি:

$(document).on("page:change", function() {
     // ... init things, just do not bind events ...
     $(document).off("page:change");
});

আমি jquery-turbolinksরত্নটি ব্যবহার করে বা একত্রিত হতে $(document).readyএবং নিজে থেকে $(document).on("page:load")ব্যবহার $(document).on("page:change")অপ্রত্যাশিতভাবে আচরণ করি - বিশেষ করে যদি আপনি বিকাশে থাকেন।


অপ্রত্যাশিতভাবে আচরণ করে আপনি কী বোঝাতে চেয়েছেন তাতে কি আপত্তি আছে?
সানিরজুনেজা

আমার $(document).offযদি সেই অনামী "পৃষ্ঠা: পরিবর্তন" ফাংশনটির বিট ছাড়াই কেবল একটি সাধারণ সতর্কতা পেয়ে থাকি তবে আমি সেই পৃষ্ঠাটিতে পৌঁছালে এটি স্পষ্টভাবে সতর্ক হবে। তবে কমপক্ষে WEBrick চলমান বিকাশে, আমি যখন অন্য পৃষ্ঠার লিঙ্কটিতে ক্লিক করব তখন এটিও সতর্ক হবে। ঘটনাটি আরও খারাপ, দু'বার সতর্ক হয় যখন আমি তারপরে মূল পৃষ্ঠার কোনও লিঙ্কে ক্লিক করি।
ধূসর কেম্মে 12:58

2

আমি নীচের নিবন্ধটি পেয়েছি যা আমার জন্য দুর্দান্ত কাজ করেছে এবং নিম্নলিখিত ব্যবহারের বিশদটি জানিয়েছে:

var load_this_javascript = function() { 
  // do some things 
}
$(document).ready(load_this_javascript)
$(window).bind('page:change', load_this_javascript)

2

আমি অনুভব করেছি যে টার্বলিংকস 5 এ আপগ্রেড করা লোকদের জন্য আমি এটি এখানে রেখেছি : আপনার কোড ঠিক করার সবচেয়ে সহজ উপায় হ'ল:

var ready;
ready = function() {
  // Your JS here
}
$(document).ready(ready);
$(document).on('page:load', ready)

প্রতি:

var ready;
ready = function() {
  // Your JS here
}
$(document).on('turbolinks:load', ready);

তথ্যসূত্র: https://github.com/turbolinks/turbolinks/issues/9#issuecomment-184717346


2
$(document).ready(ready)  

$(document).on('turbolinks:load', ready)

2
যদিও এই কোড স্নিপেট একটি ব্যাখ্যা সহ প্রশ্নটি সমাধান করতে পারে, সত্যিই আপনার পোস্টের মান উন্নত করতে সহায়তা করে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, এবং সেই লোকেরা আপনার কোড পরামর্শের কারণগুলি জানেন না।
andreas

4
আসলে, এই উত্তরটি ভুল। turbolinks:loadপ্রাথমিক পৃষ্ঠার লোড জন্য সেইসাথে নিম্নলিখিত লিঙ্ক পর ঘটনা দাবানল। যদি আপনি কোনও ইভেন্টকে স্ট্যান্ডার্ড readyইভেন্ট এবং ইভেন্টের সাথে সংযুক্ত করেন তবে আপনি turbolinks:loadযখন প্রথম কোনও পৃষ্ঠায় যান তখন এটি দু'বার ছড়িয়ে যাবে।
আলেকজানবার্ড

এই উত্তরটি ভুল। যেমনটি @alexanderbird বলেছে, এটি readyপরবর্তী পৃষ্ঠাগুলিতে দু'বার আগুন জ্বালায়। দয়া করে এটি পরিবর্তন করুন বা অপসারণ করুন।
চেস্টার

@ আলেক্সানবার্ডবার্ড আপনার মন্তব্যটি আমার জন্য সমস্যার একটি সমাধান করেছে
আনোয়ার

1

পরীক্ষিত এতগুলি সমাধান শেষ পর্যন্ত এলো। এই অনেক আপনার কোড অবশ্যই দুটিবার কল করা হয় না।

      var has_loaded=false;
      var ready = function() {
        if(!has_loaded){
          has_loaded=true;
           
          // YOURJS here
        }
      }

      $(document).ready(ready);
      $(document).bind('page:change', ready);


1

আমি আমার রেল 4 প্রকল্পের জন্য সাধারণত নিম্নলিখিতটি করি:

ভিতরে application.js

function onInit(callback){
    $(document).ready(callback);
    $(document).on('page:load', callback);
}

তারপরে বাকি .js ফাইলগুলির পরিবর্তে $(function (){})আমি কল করিonInit(function(){})


0

প্রথমে jquery-turbolinksরত্ন ইনস্টল করুন । এবং তারপর, আপনার শরীরের শেষ থেকে আপনার অন্তর্ভুক্ত জাভাস্ক্রিপ্ট ফাইল সরানো করতে ভুলবেন না application.html.erbতার কাছে <head>

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


0

আমি কোনও ফাংশন ব্যবহার করার সময় আমার ফাংশনগুলি দ্বিগুণ পেয়েছি readyএবং turbolinks:loadতাই আমি ব্যবহার করেছি,

var ready = function() {
  // you code goes here
}

if (Turbolinks.supported == false) {
  $(document).on('ready', ready);
};
if (Turbolinks.supported == true) {
  $(document).on('turbolinks:load', ready);
};

টারবোলিংকস সমর্থিত হলে আপনার ফাংশনগুলি দ্বিগুণ হবে না!

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