javascript - มุมมอง Backbone ไม่สามารถใช้คอลเลกชัน Backbone ใน typescript ได้
ฉันกำลังพยายามสร้างมุมมองของ Backbone ที่ผูกกับคอลเลกชันของ Backbone แต่ตามไฟล์คำจำกัดความจาก DefinitelyTyped วัตถุมุมมองของ Backbone สามารถรับได้เฉพาะโมเดลเท่านั้นในฐานะพารามิเตอร์ประเภททั่วไป ฉันจะผูกมุมมองกับคอลเลกชันได้อย่างไร?
โค้ดปัจจุบันของฉันแสดงข้อผิดพลาด:
export class EnvironmentMenu extends Backbone.View<EnvironmentCollection>{
constructor(options?: Backbone.ViewOptions<EnvironmentCollection>) {
super(options);
}
}
ข้อผิดพลาดคือ Type 'EnvironmentCollection' ไม่เป็นไปตามข้อจำกัด 'Backbone.Model' สำหรับพารามิเตอร์ชนิด 'TModel extends Backbone.Model'
ซึ่งฉันสมมติว่าน่าจะเป็นเพราะบรรทัดนี้ในคำนิยาม:
class Collection<TModel extends Model> extends ModelBaseโมเดลและคอลเลคชันของฉันตอนนี้เป็นแค่เปลือกเท่านั้น
แบบจำลองสิ่งแวดล้อม
export class EnvironmentModel extends Backbone.Model {
constructor(options?) {
super(options);
}
}
การเก็บรวบรวมสิ่งแวดล้อม
export class EnvironmentCollection
extends Backbone.Collection<EnvironmentModel> {
constructor(options?) {
super(options);
this.model = EnvironmentModel;
}
}
คำตอบ #1
คำตอบสำหรับเรื่องนี้ก็คือการห่อชุดข้อมูลในโมเดลแยกออกมา ซึ่งในสถานการณ์เฉพาะนี้เพิ่มมูลค่าเพิ่มเติมเพียงเล็กน้อยนอกเหนือจากการคอมไพล์โดยไม่เกิดข้อผิดพลาด แต่ฉันพบว่ามันมีประโยชน์ในการเก็บข้อมูลเพิ่มเติมที่เกี่ยวข้องกับชุดข้อมูลซึ่งยังไม่เป็นส่วนหนึ่งของคุณสมบัติของชุดข้อมูลนั้น
export class EnvironmentViewCollection extends Backbone.Model {
constructor(collection: EnvironmentCollection, options?: any) {
options = options || {};
options.innerCollection = collection;
}
getCollection() : EnvironmentCollection {
return this.get('innerCollection');
}
}
จากนั้นคุณสามารถใช้โมเดลนั้นในมุมมองได้
export class EnvironmentMenu extends Backbone.View<EnvironmentViewCollection> {
constructor(options?: Backbone.ViewOptions<EnvironmentViewCollection>) {
super(options);
}
useCollection() : void {
var collectionLength = this.model.getCollection();
console.log('The length of the collection is', collectionLength);
}
}
