سؤال

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

في المقام الأول ، كيف ينبغي بناء الرأي؟ أرغب في استخدام لغة ترميز مثل Eruby أو #Haml ، لكنني لا أعرف كيف يعملون بالضبط وكيفية تنفيذها في تطبيق غير قضبان.

كيف يحصل العرض على بيانات من النموذج والاتجاهات من وحدة التحكم؟ في القضبان ، هذا كله محزن. كيف يمكنني تنفيذ هذا؟ ما هي النظرية وراء هذا؟ هل أقوم بتوصيل قاعدة البيانات الخاصة بي في العرض ثم استخدمها بحرية هناك؟ هل أجريها عبر برنامج آخر بصرف النظر عن عارض #Haml فقط لإعطاء بياناته؟

شكرًا!

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

المحلول

ليس لديّ نقاط كافية للتعليق ولكن للإجابة على سؤالك على إجابة Cwninja ، في معظم الحالات ، تقوم بتقديم نموذج العرض ضمن إجراء وحدة تحكم. يحصل وحدة التحكم على طلب ، وتنفيذ الإجراء الصحيح وإرجاع استجابة ، وفي هذه الحالة عرض تم تقديمه كهيئة استجابة. مثال بسيط باستخدام هامل يمكن أن يبدو مثل هذا:

class SomeController

 def some_action
   @foo = "bar"
   Haml::Engine.new(template).render(self)
 end
end

في هذه الحالة ، سيتم إتاحة إعداد متغيرات الحالة في وحدة التحكم تلقائيًا للعرض لأنه يتم تعريفها في نفس السياق. لن تتوفر المتغيرات من النموذج كما لا ينبغي ، ولكن يمكن الوصول إلى أي شيء يمكنك الوصول إليه من إجراء وحدة التحكم من العرض. تتيح لك معظم أنظمة التقلبات أيضًا تمرير تجزئة من المتغيرات المحلية إلى العرض ، على سبيل المثال:

   Haml::Engine.new(template).render(self, {:foo => "bar"})

آمل أن يزيل هذا بعض ارتباكك :)

نصائح أخرى

حالة بسيطة:

ERB.new("your_template.erb").result(binding)

سيؤدي ذلك إلى تقييم القالب مع سياق المكان الذي يطلق عليه.

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

إذا كنت لا ترغب في القيام بذلك ، فأنت بحاجة إلى إنشاء فئة عرض ، ولها طريقة على النحو التالي:

def get_binding
  binding
end

ثم قم بإنشاء مثيل جديد ، وقم بتعيين جميع متغيرات المثيل حسب الحاجة في العرض ، ثم اتصل:

view = ViewClass.new
view.object = my_data_from_the_db
return [200, {…}, [ERB.new("your_template.erb").result(view.get_binding)] ]

أو ... مجرد التخلي عن واستخدام سيناترا.

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