我想在@ensure中集中驗證邏輯,但我不知道該怎麼做。 這是從文檔的例子:集中Aurelia驗證邏輯
import {Validation} from 'aurelia-validation';
import {ensure} from 'aurelia-validation';
export class Person {
static inject() { return [Validation];}
//I want to inject validation logic here instead of using function(it){...}
@ensure(function(it){ it.isNotEmpty().hasLengthBetween(3,10) })
firstName = 'John';
constructor(validation) {
this.validation = validation.on(this);
}
}
,我會改變上面的代碼如下喜歡:
import {Validation} from 'aurelia-validation';
import {ensure} from 'aurelia-validation';
import {UserValidation} from 'user/userValidation'; //custom validation logic here
export class Person {
static inject() { return [Validation];}
//can I do something like this instead of using function(it){...}?
@ensure(UserValidation.firstName)
firstName = 'John';
constructor(validation) {
this.validation = validation.on(this);
}
}
如果我們需要只收集第一頁的名字,然後我們不必這樣做畢竟,由於我們可能必須讓用戶在多個不同的頁面上輸入他們的名字,我們希望將驗證邏輯集中在某處,以便我們不必複製&將它粘貼到任何地方。我們不想創建「名字組件」,因爲UI在每個頁面上都會有所不同,所以我們只是想重用驗證邏輯。
更新: 我在Aurelia討論中問過這個問題,並被要求嘗試以下操作。
//userValidation.js
export function firstName(it){ it.isNotEmpty().hasLengthBetween(3,10)};
import {Validation} from 'aurelia-validation';
import {ensure} from 'aurelia-validation';
import * as userValidation from 'user/userValidation';
export class Person {
static inject() { return [Validation];}
@ensure(userValidation.firstName)
firstName = 'John';
constructor(validation) {
this.validation = validation.on(this);
}
}
但我收到此錯誤:未處理的承諾拒絕錯誤:錯誤實例化人。任何想法如何我可以解決這個問題?
我不知道爲什麼注射也沒有創造新的驗證 - 但你可以嘗試: 'code' 構造函數(){ this.validation =新的驗證(); this.validation.on(this); } '代碼' – Steve
@Steve,其實上面的代碼工作,但我不得不刪除我的測試代碼,不在上面的代碼示例中的一行。對困惑感到抱歉。我發佈了下面的答案。 –