(روبي، القضبان، جافا سكريبت) إعادة توجيه / التقديم صفحة مختلفة عند تعطيل جافا سكريبت ...؟

StackOverflow https://stackoverflow.com/questions/1020565

سؤال

وأنا أواجه مشكلات حادة مع القضبان، جافا سكريبت، والموجهات. في الأساس لدي قضية "بسيطة" من إعادة توجيه إلى صفحة أخرى إذا تم تعطيل JS. إذا تم تمكين JS، ثم أضيف مضمنة عنصر جديد على الفور - وهذا يعمل مثل السحر. ومع ذلك، إذا تم تعطيل JS أريد أن إعادة توجيه إلى صفحة جديدة من وحدة تحكم مختلفة. في الأساس إعداد النموذج هو على هذا النحو:

Site -> Buildings -> Controllers (not to be confused with Rails "controllers")

ولدي "SiteManagerController" يستخدم JS لإدارة كل شيء. في الأساس لدي سيناريو حيث أحاول القيام بما يلي:

1) إذا تم تمكين JS أريد أن أضيف هذا البند مضمنة 2) إذا تم تعطيل JS، وأود أن تجعل ": تحكم => المباني و: العمل => الجديد"

وبلدي "link_to_remote" غير واضحة. كما قلت، كان يعمل لJS. قانون بلدي تحكم القضبان كما يلي:

ومواطنه add_building     building = Building.new     @ building.name = "بدون عنوان"     @ building.site_id = بارامس [ID]     @ building.save     respond_to القيام | شكل |       format.html {redirect_to: تحكم => "المباني"،: العمل => "الجديد"}       format.js     النهاية   نهاية

وهذا لا يعمل. لما يستحق، عند عرض مصدر الصفحة ليس هناك ما يدل أن كل شيء مختلف عند تمكين JS مقابل المعوقين. جميع الروابط نظرة واحدة - أي Ajaxy

وأنا أعلم أنه لا ينبغي أن يكون هذا المجمع قضية، ولكن أنا الحيرة إلى حد ما.

وأفضل.

وP.S. من فضلك لا تغيير عنوان هذا المنصب. ؛)

هل كانت مفيدة؟

المحلول

والحل link_to_remote المذكورة ستعمل على الأرجح، ولكن إذا كنت تبحث عن وسيلة غير مزعجة للقيام بذلك، يمكنك استخدام بعض جافا سكريبت (مسج) مثل هذا:

وفي ملف .html.erb الخاص بك:

<%=link_to "New Building", new_building_path, :id => 'new_building_link' %>

وفي ملف جافا سكريبت:

$(document).load(function() {
  $("#new_building_link").click(function() {
    $.ajax({
      type:     "POST",  # or whatever http method you need
      url:      "/buildings/add_building",
      dataType: "script"
    });
    return false;
  });
});

وبعد ذلك رجعت بعض JS التي سيتم تحديث المنطقة من الصفحة التي تريد تغييرها.

وأنا متأكد من أن هناك وسيلة مماثلة للقيام بذلك مع النموذج، ومكتبة JS الافتراضي لالقضبان، ولكن أنا لا أعرف النموذج.

ونلاحظ أيضا أن هذا يستخدم طرق مريحة (new_building_path بدلا من تحديد وحدة تحكم والعمل). هذا هو الأسلوب المفضل الآن. كنت بحاجة فقط لإضافة "map.resources: المباني لroutes.rb. هناك زوجين من Railscasts حول طرق مريحة، وإذا كان لديك 9 $ في الانخفاض، وPeepcode.

وباعتبارها واحدة من التعليقات المذكورة يمكن أن يتقلص بناء رمز إنشاء باستخدام:     Building.create({:name => "Untitled", :site_id => params[:id]})

نصائح أخرى

وأعتقد أن الحل يكمن في "link_to_remote" وليس أي وحدة تحكم معين. يبدو التالية للعمل:

        <div><%=link_to_remote "NEW BUILDING", {:url => {:action => "add_building", :id => site.id}},
            {:href => url_for(:controller => "buildings",:action => "new")}%></div>

إذا كنت الرجال قد اقتراحات أفضل، بكل الوسائل آخر. شكرا مرة أخرى.

هل حاولت شكل من اشكال الكتابة على إعادة توجيه إلى صفحة أخرى، وبعد ذلك بعض شبيبة النار قبالة عند تحميل الصفحة أن الإفراط في ان يكتب مع الخاص بك شبيبة اياكس ذ؟ بهذه الطريقة، إذا تم تعطيل شبيبة، سيتم إعادة توجيه الصفحة كما هو متوقع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top