php - Emberjs ، جانب الخادم مقابل جانب العميل ، كل في؟




javascript rest yii ember.js (4)

فقط لإضافة منظور يي هنا. يحدث الكثير من "سحر" طرق عرض / قوائم الشبكة داخل موفر البيانات (للبحث المعقد والفرز والتصفية) وبوجود البيانات المنسقة مع الحقول التي تم تحليلها في النماذج.

لذا يمكنك الاستفادة من جانب خادم المفاهيم نفسه وإخراج JSON النهائي ، المرقّم وكل شيء ، من خلال الأداة الخاصة بك ؛ أو حتى مجرد تجاوز عرض الشبكة وإخراج json بدلاً من العرض بعد معالجة البيانات / التكوين.

بمجرد حصولك على JSON بدلاً من HTML ، من السهل جدًا تكرار الواجهة الأمامية للشبكة ، فليس هناك الكثير من الوظائف التي تحدث هناك.

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

TL، DR.
تجاوز عناصر واجهة المستخدم Yii التي لديك بالفعل وظائف مصممة للاستخدام ، واستخدامها لإخراج JSON بدلاً من HTML.

لقد كنت أبحث في Ember.js ، ويبدو الأمر رائعًا جدًا ، ولكن هناك أمرًا واحدًا يهمني ، ولا أستطيع أن أفكر في الأمر ، إذا بدأت في استخدامه في مشروع قائم بالفعل.

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

اسمحوا لي أن أوضح...

حتى الآن أفضل طريقة للتواصل بين العميل والخادم باستخدام Ember هي REST. وهذا يبدو رائعًا ، ولكن ما لا يعجبني هو امتلاك جميع النماذج التي تم تحميلها لأول مرة. وتحريك كل المنطق في الخادم الخاص بي إلى العميل (أو هل يمكنني الحصول على كل هذا الخطأ؟) ، لأنه يبدو أن جانب الخادم الخاص بي سيصبح واجهة برمجة تطبيقات REST أقل منطقية.

أيضا ، أنا باستخدام Yii Framework الذي يحتوي على بعض مكونات JavaScript (Ajax enabled) مثل grids . كيف يمكنني التفاعل مع كل هذا على navigation دون الحاجة إلى إعادة كتابة مجموعة من الأشياء التي تعمل بالفعل على طلبي؟

أنا في صفحة تسجيل الدخول (أو الولاية) ، وبعد تسجيل الدخول ، يجب أن أقوم بعرض grids ، وهذا أمر سهل مع Yii ، وتحميل صفحة كاملة ، ولكن إذا كنت أستخدم Ember ، كيف يمكنني الحصول على عرض الشبكة كما تفعل عادة؟ أحتاج إلى تحميل قالب المقود للشبكة مسبقًا ، وكذلك على جافا سكريبت التي تتحكم فيه؟


في تجربتي ، يمكنك فقط الوصول إلى وحدات التحكم والإجراءات الموجودة (بواسطة cli أو http) مع JS الخاص بالخادم. لقد فعلت نفس الشيء مع تطبيقي الحالي الذي تم دمجه مع node.js.

فائدة من هذا هو أنه يمكنك الاحتفاظ بك رمز exisitng كمرجعية للمتصفحات التي لا تدعم بشكل كامل تطبيقاتك الجديدة أو لبرامج البحث التي لا تعد كبيرة مع javascript في المقام الأول.

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

ويتم تحميل الصفحة مع مشاهدات php ووحدات التحكم الافتراضية على أي حال لأنها موجودة بالفعل.


لا ، لا ينبغي عليك نقل كل شيء إلى جانب العميل ، وخاصة المصادقة والتحقق من الصحة التي يمكن تجاوزها بخلاف ذلك.

ما تنتقل إلى Emberjs هو جزء عرض yii-s من MVC ، سوف يخرج جهاز التحكم أي JSON.

ثم يتم تعيين هذه البيانات إلى جزء Embers Model من خلال التوجيه والتحكم في Ember إلخ.

نظرًا لأنك تستبدل منطق العرض التقديمي لـ Yi مع ember ، فلا يجب استخدام فصول YiI UI مثل CGridView. قد يكون مزجها ممكنًا لكن هذا لا يبدو فكرة جيدة. لديك لتشغيل بنفسك في العنبر.

http://www.yiiframework.com/wiki/409/ember-js-with-yii-rest-backend-demo-application/


في حال احتاج أي شخص إلى هذا الأمر من أجل الحصول على تعويض خروج المغلوب ، فإنه يعمل بشكل جيد مع الحل المقترح:

أتش تي أم أل:

<a data-bind="attr: {download: filename, href: csvContent}">Download</a>

نموذج العرض:

// for the download link
this.filename = ko.computed(function () {
    return ko.unwrap(this.id) + '.csv';
}, this);
this.csvContent = ko.computed(function () {
    if (!this.csvLink) {
        var data = ko.unwrap(this.data),
            ret = 'data:text/csv;charset=utf-8,';

        ret += data.map(function (row) {
            return row.join(',');
        }).join('\n');

        return encodeURI(ret);
    }
}, this);






php javascript rest yii ember.js