2016-04-14 53 views
0

我創建了一個叫做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 { 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和驗證,但它沒有區別。

爲什麼供應商無法在其父級(BaseModel)類中看到變量?

回答

0

我不認爲依賴注入是這樣工作的,它只會注入到當前創建的對象上。這可能打敗目的,但你需要做的是一樣的東西:

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);  
    } 
}