我正在Aurelia中構建一個多步驟表單,每個頁面顯示一個問題。只有null或數組實例可以綁定到多選
我對每個問題都使用相同的視圖,並使用if
語句確定要顯示的表單類型字段。
當我嘗試將我的問題數據綁定到多選元素時,Aurelia會拋出錯誤並說「只有null或Array實例可以綁定到多選。」。
真奇怪的是,如果第一個問題是一個多重選擇,我不會收到錯誤,直到我來到一個非多選問題,然後回到多選問題。
我可以通過爲此路線設置activationStrategy: 'replace'
來解決整個問題,但我真的不希望這樣。
重要的代碼如下:
import {inject} from 'aurelia-framework';
import {Router} from 'aurelia-router';
@inject(Router)
export class Form {
constructor (router) {
this.router = router;
this.active = 0;
this.field = null;
this.fields = [
{
type: 'text',
value: null
},
{
type: 'select',
value: [],
options: [
'foo',
'bar'
]
},
{
type: 'select',
value: [],
options: [
'foo',
'bar'
]
},
{
type: 'text',
value: null
},
];
}
activate (routeParams) {
this.active = routeParams.fieldIndex || 0;
this.active = parseInt(this.active);
this.field = this.fields[this.active];
}
prev() {
if (typeof this.fields[this.active - 1] !== 'undefined') {
this.router.navigateToRoute('form', {
fieldIndex: this.active - 1
});
return true;
}
else {
return false;
}
}
next() {
if (typeof this.fields[this.active + 1] !== 'undefined') {
this.router.navigateToRoute('form', {
fieldIndex: this.active + 1
});
return true;
}
else {
return false;
}
}
}
而且模板:
<template>
<div class="select" if.bind="field.type == 'select'">
<select value.bind="field.value" multiple="multiple">
<option repeat.for="option of field.options" value.bind="option">${option}</option>
</select>
</div>
<div class="text" if.bind="field.type == 'text'">
<input type="text" value.bind="field.value">
</div>
<a click.delegate="prev()">Previous</a> | <a click.delegate="next()">Next</a>
</template>
但你可能會想檢查出GistRun:https://gist.run/?id=4d7a0842929dc4086153e29e03afbb7a,以獲得更好的理解。
嘗試將第一個問題設置爲多選,並且您會注意到錯誤消失(直到您回到它)。您也可以在app.js中嘗試activationStrategy
,如上所述。
爲什麼會發生這種情況,我該如何解決?
另請注意,在我的真實應用程序中,我實際上使用compose
而不是if
s,但已嘗試使用這兩種方法,兩者都產生相同的錯誤。看起來好像選擇值在if被評估之前被綁定,導致錯誤出現,因爲text
字段類型缺少options
數組。
我認爲這個問題歸結於在'
@thebluefox感謝您的幫助。但是,我不遵循:/從選項中刪除'value.bind'沒有幫助。請注意,在某些情況下,代碼工作正常,所以我懷疑實際的數據綁定有什麼問題。 – powerbuoy
通過這種邏輯,雖然沒有任何代碼是錯誤的,因爲它在所有情況下都能正常工作;)但我明白了關於該答案的觀點。我剛剛測試了綁定'