أنا لا أتبع. كيف يتم تعريف النموذج كدالة؟
لقد واجهت بالفعل هذه المشكلة (أو شيء مشابه) بالأمس.
يمكنك تحديد دالة نموذج في مجموعة لإنشاء نموذج متعدد الأشكال.
عند استدعاء .add
في مجموعتك ، يحاول رمز العمود الفقري استدعاء .prototype.idAttribute
على السمة model
، لكن إذا قمت بتعريف الوظيفة model
على أنها طريقة فئة ES2015 لا تحتوي على سمة prototype
.
على سبيل المثال ، سيؤدي هذا إلى حدوث المشكلة:
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
.انظر هنا:
على سبيل المثال ، سيؤدي هذا إلى حدوث المشكلة:
const Library = Backbone.Collection.extend({ model () { // stuff goes here } });
إذا حددته على هذا النحو ، فستختفي المشكلة:
const Library = Backbone.Collection.extend({ model: function () { // stuff goes here } });
شكرا لك على وصف تفصيلي للمشكلة!
لكن إجابتك ليست في حل مشكلة idAttribute.
عند إضافة مرجع نموذج جديد غير مضاف. لذلك لا يمكنك الحصول على نموذج جديد عن طريق معرف.
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 القديم ، بعد حل النزاعات. اسمحوا لي أن أعرف إذا كان يسبب لك أي مشكلة ...
التعليق الأكثر فائدة
لقد دمجت للتو https://github.com/jashkenas/backbone/pull/3966 PR القديم ، بعد حل النزاعات. اسمحوا لي أن أعرف إذا كان يسبب لك أي مشكلة ...