Inheritance 验证和继承
我创建了以下名为baseModel.js的基类Inheritance 验证和继承,inheritance,aurelia,Inheritance,Aurelia,我创建了以下名为baseModel.js的基类 import { Validation } from 'aurelia-validation'; let id; let version; let validation; @inject(Validation) export class BaseModel { constructor(validation) { this.validation = validation; } } 我正在supplierModel.js中
import { Validation } from 'aurelia-validation';
let id;
let version;
let validation;
@inject(Validation)
export class BaseModel {
constructor(validation) {
this.validation = validation;
}
}
我正在supplierModel.js中扩展它
import { BaseModel } from "./baseModel";
let apSupplierCode;
let discountRate;
export class Supplier extends BaseModel {
constructor() {
super();
super.validation = validation.on(this)
.ensure('apSupplierCode')
.isNotEmpty()
.hasLengthBetween(3, 6)
.ensure('discountRate')
.isNotEmpty()
.containsOnlyDigits()
.isBetween(10, 45.99);
}
}
我在控制台中遇到以下错误
inner error: ReferenceError: validation is not defined
at new Supplier http://localhost:9000/dist/models/supplierModel.js:63:55)
我尝试过使用get/set访问器、super.validation和just-validation,但没有任何区别
为什么供应商在其父(BaseModel)类中看不到变量 我不认为依赖项注入是这样工作的,它只会注入您正在创建的当前对象。这可能会破坏目标,但您需要做的是:
import { Validation } from 'aurelia-validation';
export class Supplier extends BaseModel {
@inject(Validation)
constructor(validation) {
super(validation);
// Do stuff
}
}
另一种选择是从基类中的容器显式加载依赖项
import {Container} from 'aurelia-dependency-injection';
import {Validation} from 'aurelia-validation';
export class BaseModel {
constructor() {
this.validation = Container.instance.get(Validation);
}
}