![U1db에서 'ReferenceError: 내용이 정의되지 않았습니다'](https://rvso.com/image/1126783/U1db%EC%97%90%EC%84%9C%20'ReferenceError%3A%20%EB%82%B4%EC%9A%A9%EC%9D%B4%20%EC%A0%95%EC%9D%98%EB%90%98%EC%A7%80%20%EC%95%8A%EC%95%98%EC%8A%B5%EB%8B%88%EB%8B%A4'.png)
U1db의 데이터베이스에서 정보를 읽으려고 합니다.
이 오류가 발생했습니다
'ReferenceError: contents is not defined'
. 내 코드는 다음과 같습니다.
import U1db 1.0 as U1db
U1db.Database {
id: db
path: "lU1DbDatabase"
}
U1db.Document {
id: doc
database: db
docId: 'doc1'
create: true
defaults: { "name":["Jerusalem"]}
}
U1db.Index{
database: db
id: index1
expression: [["name"]]
}
U1db.Query{
id: query1
index: index1
}
OptionSelector {
id:selector1
model:query1
delegate: OptionSelectorDelegate {
text: i18n.tr(contents.name)//this work perfect
}
onSelectedIndexChanged: {
console.log(contents.name);//this get the error!
}
}
이것은 문제를 일으키는 부분을 잘라낸 큰 코드의 일부입니다.
내가 도대체 뭘 잘못하고있는 겁니까? 감사합니다!
답변1
문제는 U1DB가 아니라 OptionSelector에 있습니다. 더 간단한 예를 생각해 보겠습니다.
import QtQuick 2.0
import Ubuntu.Components 1.0
MainView {
OptionSelector {
model: ListModel {
ListElement { name: "Item 1" }
ListElement { name: "Item 2" }
}
delegate: OptionSelectorDelegate {
text: i18n.tr(name)
}
onSelectedIndexChanged: {
console.log(name)
}
}
}
인덱스가 변경되면 "ReferenceError: 이름이 정의되지 않았습니다"라는 오류가 발생합니다. 그리고 왜 그것이 정의되기를 기대합니까? "name"이라는 변수를 정의하지 않았으며 OptionSelector에는 "name" 속성이 없습니다.
대리자에서 "이름"을 참조할 수 있는 이유는 무엇입니까? 모델의 각 요소에 대한 대리자로부터 새 개체가 생성됩니다. 이 객체는 해당 목록 요소에서 속성을 가져오고 목록 요소에는 "이름" 속성이 포함됩니다. 마찬가지로, 귀하의 예에서 U1db.Query는 "내용" 속성을 가진 목록 요소를 생성했는데, 이는 분명히 "이름" 속성을 가진 개체였습니다.
대리자 외부에서 해당 속성을 참조하려면 모델에 접근하여 추출해야 합니다.
console.log(model.get(selectedIndex).name)
귀하의 경우 모델은 ListModel이 아닌 U1db.Query이므로 메서드가 없습니다 get()
. 여기에는 색인을 생성할 수 있다고 생각되는 목록이 있지만 results
U1db에 대해 더 자세히 설명할 만큼 지식이 없습니다. 이것이 당신을 올바른 길로 안내하기에 충분하기를 바랍니다.