Backbone: idAttribute غير معرّف لطريقة modelId إذا تم تعريف النموذج كوظيفة.

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

duplicate

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

لقد دمجت للتو https://github.com/jashkenas/backbone/pull/3966 PR القديم ، بعد حل النزاعات. اسمحوا لي أن أعرف إذا كان يسبب لك أي مشكلة ...

ال 10 كومينتر

أنا لا أتبع. كيف يتم تعريف النموذج كدالة؟

لقد واجهت بالفعل هذه المشكلة (أو شيء مشابه) بالأمس.

يمكنك تحديد دالة نموذج في مجموعة لإنشاء نموذج متعدد الأشكال.

عند استدعاء .add في مجموعتك ، يحاول رمز العمود الفقري استدعاء .prototype.idAttribute على السمة model ، لكن إذا قمت بتعريف الوظيفة model على أنها طريقة فئة ES2015 لا تحتوي على سمة prototype .

انظر هنا: https://github.com/jashkenas/backbone/blob/75e6d0ce6394bd2b809823c7f7dc014ddb6ae287/backbone.js#L1102

على سبيل المثال ، سيؤدي هذا إلى حدوث المشكلة:

const Library = Backbone.Collection.extend({
    model () {
       // stuff goes here
   }
});

إذا حددته على هذا النحو ، فستختفي المشكلة:

const Library = Backbone.Collection.extend({
    model: function () {
       // stuff goes here
   }
});

لقد واجهت بالفعل هذه المشكلة (أو شيء مشابه) بالأمس.

يمكنك تحديد دالة نموذج في مجموعة لإنشاء نموذج متعدد الأشكال.

عند استدعاء .add في مجموعتك ، يحاول رمز العمود الفقري استدعاء .prototype.idAttribute على السمة model ، لكن إذا قمت بتعريف الوظيفة model على أنها طريقة فئة ES2015 لا تحتوي على سمة prototype .

انظر هنا:

https://github.com/jashkenas/backbone/blob/75e6d0ce6394bd2b809823c7f7dc014ddb6ae287/backbone.js#L1102

على سبيل المثال ، سيؤدي هذا إلى حدوث المشكلة:

const Library = Backbone.Collection.extend({
    model () {
       // stuff goes here
   }
});

إذا حددته على هذا النحو ، فستختفي المشكلة:

const Library = Backbone.Collection.extend({
    model: function () {
       // stuff goes here
   }
});

شكرا لك على وصف تفصيلي للمشكلة!

لكن إجابتك ليست في حل مشكلة idAttribute.

عند إضافة مرجع نموذج جديد غير مضاف. لذلك لا يمكنك الحصول على نموذج جديد عن طريق معرف.

image

Workarond - السمة model.prototype.id المضافة هي نفسها الموجودة في النموذج.

أعتقد أن المشكلة تكمن في أن model على Collection يتم تعريفه على أنه: Override this property to specify the model class that the collection contains. لا تدعم واجهة برمجة التطبيقات هذه تعريف النموذج كدالة.

paulfalgout مستندات العمود الفقري لـ Collection.model حدد أنه يمكنك تعيين وظيفة كـ model . يبدو أن هذا غير ممكن مع بناء الجملة model () (بدلاً من model: function() ) خطأ بالنسبة لي أو على الأقل محيرًا للغاية.

نعم ، لقد قمت بربط الجزء ذي الصلة من المستندات في رسالتي الأصلية.

انظر هنا: https://backbonejs.org/#Collection -model

PavelKoroteev : يبدو أن مشاكلنا مرتبطة ببعضها البعض ولكنها ليست نفسها.

هذا ما أتحدث عنه (مُلصق من وحدة التحكم):

collection = new (Backbone.Collection.extend({  model (attrs, options) { return new (Backbone.Model.extend({ idAttribute: 'customId' }))(attrs, options)}}));

child {length: 0, models: Array(0), _byId: {…}}

collection.add({ customId: 'id.1' });
backbone.js:1102 Uncaught TypeError: Cannot read property 'idAttribute' of undefined
    at child.modelId (backbone.js:1102)
    at child.get (backbone.js:997)
    at child.set (backbone.js:872)
    at child.add (backbone.js:814)
    at <anonymous>:1:12

أعتقد أن القضية هي نفسها في الواقع. وأيضًا نفس https://github.com/jashkenas/backbone/issues/4203

سيؤدي استخدام model: function(attrs, options) إلى إنشاء نموذج أولي لا يحتوي على idAttribute وسيعود إلى id لذا فإنه "يعمل"

أنت على صواب موثق النموذج متعدد الأشكال. _but _... لم تدعم أساليب idAttribute أو es6 بسبب هذا السطر مع model.prototype لفترة طويلة.

يبدو https://github.com/jashkenas/backbone/pull/3966 هو إصلاح من نوع: - /

إن رؤية العلاقات العامة من عام 2016 تضعف ولم يتم دمجها (أو رفضها لصالح شيء أفضل) يثنيني بشكل أساسي عن محاولة تكوين علاقات عامة لإصلاح هذه المشكلة.

مما يمكنني قوله ، العمود الفقري ميت إلى حد كبير.

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

لقد دمجت للتو https://github.com/jashkenas/backbone/pull/3966 PR القديم ، بعد حل النزاعات. اسمحوا لي أن أعرف إذا كان يسبب لك أي مشكلة ...

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

القضايا ذات الصلة

azizZaben picture azizZaben  ·  5تعليقات

zowers picture zowers  ·  11تعليقات

ghost picture ghost  ·  8تعليقات

alundiak picture alundiak  ·  7تعليقات

rafde picture rafde  ·  9تعليقات