Backbone: أضف دعم getter / setter لتوسيع الطريقة

تم إنشاؤها على ٩ فبراير ٢٠١٥  ·  12تعليقات  ·  مصدر: jashkenas/backbone

نظرًا لأن الحاصل / الضبط مدعوم IE9 + وسيكون أكثر انتشارًا مع ES6 ، فسيكون من الجيد أن تدعمهم طريقة تمديد العمود الفقري.

var Person = Backbone.Model.extend({
  get fullName() {
    return this.get('firstName') + ' ' + this.get('lastName');
  }
});

var elonMusk = new Person({
  firstName: 'Elon', 
  lastName: 'Musk'
});

console.log(person.fullName); // >> Elon Musk

سينتج عن هذا الآن undefined is not a function لأن استخدام _.extend يستدعي الطالب.

change wontfix

التعليق الأكثر فائدة

بالتأكيد ، سأفعل ذلك

ال 12 كومينتر

هل هناك أي سبب لا يمكن كتابته بشكل أفضل كـ person.fullName() حتى تعرف أنها مكالمة دالة؟

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

أكثر من أي شيء ، سيتم محاذاة هذا جزئيًا مع بناء جملة الفئة الجديد. لا توجد مهيئات خاصية في بناء جملة الفئة أو حتى أي مواصفات لها حتى الآن ، لذا سيكون interop مشكلة.

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

ما هي الفكرة الأساسية هذه؟

تعد أيضًا الكلمات حلاً جزئيًا لمشكلة حالية في Backbone.Collection مع model.idAttribute .

قضيت بضع دقائق في محاولة عمل jsperf بحلول مختلفة:
http://jsperf.com/backbone-extend-with-define-property

ما هي الفكرة الأساسية هذه؟

فكرة أن إعداد واسترجاع خاصية على كائن يجب أن يكون شفافًا ومنطقيًا للتعليل. يجب أن تعلم دائمًا أن obj.prop = val لا يفعل أبدًا أي شيء بخلاف تعيين قيمة هذه الخاصية (كما سبق للاسترجاع) ، بينما يجب علينا استخدام وظائف للتعامل مع أشياء مثل الخصائص المحسوبة وتغيير الأحداث. هذا هو السبب الرئيسي لطرق الغلاف get و set حول attributes في المقام الأول.

تعد أيضًا الكلمات حلاً جزئيًا لمشكلة موجودة في Backbone.Collection with model.idAttribute.

أي سبب من الأسباب أن الغلاف الحالي _.result لا يعمل مع هذا؟ يمكن أن يكون idAttribute إما بدائيًا أو تابعًا. تم إصلاح هذا أيضًا بـ modelId .

عذرًا ، كان يجب علي ربط المشكلة التي كنت أتحدث عنها: https://github.com/jashkenas/backbone/issues/3408

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

لا يدعم CoffeeScript أدوات الضبط والمكتسبات إلى حد كبير للأسباب نفسها (انظر إلى المشكلات هناك للحصول على بعض المعلومات الأساسية ، بدءًا من https://github.com/jashkenas/coffeescript/pull/2902). لا ينبغي أن تكون عقبة في طريق دعم كائنات العمود الفقري كفئات.

معذرةً ، كان عليّ ربط المشكلة التي كنت أتحدث عنها: # 3408

ذكرني؟ أنا أحاول أن أرى الاتصال بعيدًا عن الخفافيش.

بالإضافة إلى ذلك ، يجب إجراء أي تغييرات على extend في _.extend ، وليس هنا. إغلاق باعتبارها wontfix.

لا يدعم CoffeeScript أدوات الضبط والمكتسبات إلى حد كبير للأسباب نفسها

لم أكن أتحدث عن الحاصلون / المحددون ، كنت أتحدث عن كيفية إضافة Backbone __super__ للتفاعل مع CoffeeScript ، وكيف أنه من المنطقي فقط دعم فصول ES6 بنفس الطريقة.

ذكرني؟ أنا أحاول أن أرى الاتصال بعيدًا عن الخفافيش.

Collection.extend({
  model: function() { return Model }
});
//
collection.modelId(model); // 'id' regardless if that's correct or not.
Collection.extend({
  get model() { return Model }
});
//
collection.modelId(model); // correct for *some* of the common cases.

بالإضافة إلى ذلك ، يجب إجراء أي تغييرات للتمديد في _.extend ، وليس هنا. إغلاق باعتبارها wontfix.

هذا بالتأكيد ليس المكان المناسب لهذا التغيير ، إذا كان أي شيء سيكون بطريقة _.assign الجديدة. ولكن من المنطقي أكثر أن يتم دعمها هنا IMO.

أيضًا ، قبل أن يتم إغلاق هذه المشكلة ونسيانها ، أود أن أتحدث عن سبب عدم وجود مشكلة في امتداد Backbone ليشمل مشكلات التشغيل المتداخل مع فصول ES ولكن ليس صفوف CoffeeScript.

حسنًا ، نظرًا لأن IE Tech Preview هو المتصفح الوحيد الذي يوفر دعمًا لائقًا عن بُعد class (حتى Traceur و 6to5 لم يحولا بعد extends ) ، فنحن بعيدون عن هذا. من الضروري. وبغض النظر عن ذلك ، فإن Backbone لن يخرج عن طريقه لكسر التوافق مع الإصدارات السابقة فقط لدعم ميزة ليست فكرة رائعة لتبدأ بها.

حتى Traceur و 6to5 لم يحولوا بعد extends

كلاهما في الواقع ، يحتاجان فقط إلى دعم __proto__ للخصائص الثابتة المدعومة على نطاق واسع.

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

thejameskyle هل تريد تحويل هذا إلى علاقات عامة بدلاً من مشكلة؟ إنه يستحق النظر إليه.

بالتأكيد ، سأفعل ذلك

هل هو في الطريق؟ هل لديك فكرة أو شيء عن ذلك؟ أود أن ألتقط صورة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات