2016-04-14 6 views
0

Ich habe die folgende Basisklasse baseModel.jsValidierung und inheritence

import { Validation } from 'aurelia-validation'; 

let id; 
let version; 
let validation; 

@inject(Validation) 

export class BaseModel { 

constructor(validation) { 

    this.validation = validation; 

    } 
} 

Ich bin es mich in den 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); 
    } 
} 

Ich bin immer in der Konsole namens erstellt die folgenden Fehler

inner error: ReferenceError: validation is not defined 
    at new Supplier http://localhost:9000/dist/models/supplierModel.js:63:55) 

Ich habe versucht mit einem Get/Set Accessoren, Super.validation und nur Validierung, aber es macht keinen Unterschied.

Warum kann der Lieferant keine Variable in seiner übergeordneten Klasse (BaseModel) sehen?

Antwort

0

Ich glaube nicht, dass die Abhängigkeitsinjektion so funktioniert, sie injiziert nur auf das aktuelle Objekt, das Sie erstellen. Dies kann die Niederlage der Zweck aber, was Sie tun müssen, ist so etwas wie:

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

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

Die andere Alternative explizit die Abhängigkeit von dem Behälter in der Basisklasse laden ist

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

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