بشكل صحيح تكوين أجهزة التوجيه الوالدين الطفل العلاقة في العمود الفقري ماريونيت

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

  •  29-10-2019
  •  | 
  •  

سؤال

محاولة إنشاء صفحة تتيح للمستخدمين إضافة وتحرير وعرض والد الطفل جنبا إلى جنب.

واجهة المستخدم لديه 3 أعمدة الأم :قائمة الآباء الأطفال :الطفل

أريد تكوين وحدات التحكم(s) حيث أن المستخدمين يمكن أن يعود إلى الحق حيث كانوا ولكن أرى أنه لا حاجة إلى ذلك كل من الأم والطفل يمكن أن تكون قابلة للتعديل.

// تقترب باستخدام العمود الفقري دمية ولكن لا تزال تواجه بعض القضايا الصغيرة

    MyRouter = Backbone.Marionette.AppRouter.extend({
        appRoutes: {
            '': 'AddClient',
            'View/:clientid': 'ViewClient',
            'Edit/:clientid': 'EditClient',
            'View/:clientid/Add': 'PolicyAdd',
            'View/:clientid/View/:policyid': 'PolicyView',
            'View/:clientid/Edit/:policyid': 'PolicyEdit'
        }
    });

    someController = {
        AddClient: function () {
            var someView = new ClientAdd();
            MyApp.clientPane.show(someView);
        },
        ViewClient: function (clientid) {
            var someView = new ClientView();
            MyApp.clientPane.show(someView);
        },
        EditClient: function (clientid) {
            var someView = new ClientEdit();
            MyApp.clientPane.show(someView);
        },
        PolicyAdd: function (clientid) {
            this.ViewClient(clientid);
            var someView = new PolicyAdd();
            MyApp.policyPane.show(someView);
        },
        PolicyView: function (clientid, policyid) {
            this.ViewClient(clientid);
            var someView = new PolicyView();
            MyApp.policyPane.show(someView);
        },
        PolicyEdit: function (clientid, policyid) {
            this.ViewClient(clientid);
            var someView = new PolicyEdit();
            MyApp.policyPane.show(someView);
        }
    };

وجود "هذا.ViewClient" يشعر hacky و أيضا لا يعمل.

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

المحلول

متعدد جزء الجواب هنا...

"هذا.ViewClient ليست وظيفة"

هذا هو الخلل في ماريونيت.طريقة تحكم في سياق التوجيه بدلا من وحدة تحكم ، وبالتالي فإن الدعوة إلى this.ViewClient تحاول العثور عليه على جهاز التوجيه.

عفوا.

علة تسجيل.سيتم إصلاح في اسرع وقت ممكن. https://github.com/derickbailey/backbone.marionette/issues/38

--

التحديث:يتم الآن إصلاح هذا الخطأ في v0.5.1 من العمود الفقري.دمية https://github.com/derickbailey/backbone.marionette

--

كمحاولة للتغلب على هذه المشكلة الآن يمكنك أن تفعل هذا:

PolicyEdit: {
  someController.ViewClient();
  // ...
}

إذا كان هذا لا يعمل, قد تحتاج إلى استخدام Underscore.js' bind أو bindAll طرق لضمان الصحيحة الملزمة على وظائف تحكم.

هذه الحل لن يكون ضروريا عندما أحصل على علة ثابتة...ونأمل في وقت لاحق اليوم / الليلة.

هو في الأساس تدعو طرق أخرى أفضل طريقة معالجة العديد من المناطق ؟

الجواب المباشر على هذا السؤال هو لا.

ولكن أنت لا تتصلين طريقا في هذه الحالة.أنت استدعاء أسلوب على وحدة التحكم الخاصة بك.أنه بخير تماما - و في الحقيقة أنا أشجع هذا.هو الاستخدام السليم من وجوه الخاص بك, و هو واحد من الأشياء التي أعتقد أنه ينبغي القيام به بدلا من استدعاء آخر الطريق / راوتر معالج.

أجهزة التوجيه والتحكم

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

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

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

على أمل أن يساعد.:)

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