it-swarm.asia

لا يتم تحميل سكك ، جافا سكريبت بعد النقر فوق link_to المساعد

أواجه بعض المشكلات في تحميل javascript عندما أستخدم مساعد link_to في Rails. عندما أقوم بإدخال عنوان url يدويًا باستخدام "localhost: 3000/products/new" أو إعادة تحميل الصفحة ، يتم تحميل جافا سكريبت ، ولكن عندما أتصفح رابطًا كما هو موضح أدناه ، لن يتم تحميل jQuery $(document).ready على الصفحة الجديدة.

Link_to ، لا يتم تحميل جافا سكريبت عندما أنقر على هذا الرابط:

<%= link_to "New Product", new_product_path %>

ملف products.js

$(document).ready(function() {
    alert("test");
});

أي مساعدة سيكون محل تقدير كبير. شكرا لك مقدما!

71
StickMaNX

هل تستخدم القضبان 4؟ (اكتشف بالقيام بـ Rails -v في وحدة التحكم الخاصة بك)

من المحتمل أن تكون هذه المشكلة بسبب Turbolinks gem المضافة حديثًا. يجعل التطبيق الخاص بك يتصرف مثل تطبيق JavaScript صفحة واحدة. له فوائد قليلة ( إنه أسرع ) ، لكنه للأسف يكسر بعض الأحداث الحالية مثل $(document).ready() لأنه لم يتم إعادة تحميل الصفحة. هذا من شأنه أن يفسر لماذا يعمل جافا سكريبت عندما تقوم بتحميل عنوان URL مباشرة ، ولكن ليس عندما تنتقل إليه من خلال link_to.

إليك RailsCast حول Turbolinks.

هناك حلول زوجين. يمكنك استخدام jquery.turbolinks كإصلاح في القائمة المنسدلة ، أو يمكنك تبديل بيان $(document).ready() الخاص بك بدلاً من ذلك لاستخدام حدث Turbolinks 'page:change':

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

بدلاً من ذلك ، يمكنك القيام بشيء من هذا القبيل للتوافق مع تحميلات الصفحات العادية وكذلك Turbolinks:

var ready = function() {
    // do stuff here.
};

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

إذا كنت تستخدم Ruby on Rails> 5 (يمكنك التحقق من تشغيل Rails -v في وحدة التحكم) ، فاستخدم 'turbolinks:load' بدلاً من 'page:change'

$(document).on('turbolinks:load', ready); 
129
Ryan Endacott

حصلت على نفس المشكلة ولكن jquery.turbolinks لم يساعد. لقد لاحظت أنه لا بد لي من تجاوز طريقة GET.

هناك عينة بلدي:

<%= link_to 'Edit', edit_interpreter_path(@interpreter), method: :get %>
62
Ice-Blaze

إذا كنت تستخدم Rails 5 بدلاً من 'page:change' ، فيجب عليك استخدام 'turbolinks:load' كما يلي:

$(document).on('turbolinks:load', function() {
  // Should be called at each visit
})

المصدر: https://stackoverflow.com/a/36110790

21
user000001

يمكنك أيضًا التفاف الرابط الخاص بك باستخدام div التي تحدد بيانات no-turbolink.

مثال:

<div id="some-div" data-no-turbolink>
    <a href="/">Home (without Turbolinks)</a>
</div>

المصدر: https://github.com/Rails/turbolinks

4
equn

FWIW ، من مستندات Turbolinks ، الحدث الأكثر ملاءمة لالتقاط بدلاً من $(document).ready هو page:change.

يحتوي page:load على تحذير بأنه لا يتم إعادة تحميل ذاكرة التخزين المؤقت ...

تم تحميل عنصر نص جديد في DOM. لا تطلق النار على استبدال جزئي أو عند استعادة صفحة من ذاكرة التخزين المؤقت ، حتى لا تطلق النار مرتين على نفس الجسم.

ونظرًا لأن Turbolinks تقوم فقط بتبديل العرض ، فإن page:change هو الأنسب.

2
pyepye

تأكد من عدم وجود أي علامات <script> مضمنة. (علامات البرامج النصية المضمّنة سيئة في الارتباطات التوربينية).

2
poorman