验证和继承

Validation and inheritence

我创建了以下名为 baseModel.js

的基础 class
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 和验证,但没有任何区别。

为什么 Supplier 看不到其父项 (BaseModel) 中的变量 class?

我不认为依赖注入是这样工作的,它只会注入你正在创建的当前对象。这可能会破坏目的,但您需要做的是:

import { Validation } from 'aurelia-validation';
export class Supplier extends BaseModel {

@inject(Validation)
constructor(validation) {
    super(validation);
    // Do stuff
    }
}

另一种选择是从基础容器中显式加载依赖项class

import {Container} from 'aurelia-dependency-injection';
import {Validation} from 'aurelia-validation';

export class BaseModel {   
constructor() {        
    this.validation = Container.instance.get(Validation);    
    }
}