Javascript for循环中的Qt.binding
在Javascript for循环中的Qt.binding,javascript,qt,qml,qt5,qtquick2,Javascript,Qt,Qml,Qt5,Qtquick2,在选项卡视图中,我试图从字符串属性加载选项卡项列表: TabView { id: tabView1 property string tabs: "/etc,/bin" function loadTabs() { var tab_array = tabs.split(","); for (var i = 0; i < tab_array.length; i ++) { var dirTableView = Qt
选项卡视图
中,我试图从字符串属性加载选项卡
项列表:
TabView {
id: tabView1
property string tabs: "/etc,/bin"
function loadTabs() {
var tab_array = tabs.split(",");
for (var i = 0; i < tab_array.length; i ++) {
var dirTableView = Qt.createComponent("dirview.qml");
var newTab = tabView1.addTab("", dirTableView);
newTab.active = true;
newTab.item.folderUrl = "file://" + tab_array[i];
newTab.title = Qt.binding(function() {
return newTab.item.folderUrl.toString().replace("file://", "");
});
}
}
Component.onCompleted: {
loadTabs();
}
}
但这也不行。显然Qt.binding()
会在声明数组时立即触发,但此时数组为空,因此我得到错误“无法读取未定义的属性'item'”(参考Qt.binding()
)。奇怪的是,当应用程序启动时,标题的设置是正确的,但是当我在目录树中导航时,item.folderUrl
发生变化时,标题不会相应地更新,因此绑定不起作用
在for循环中正确绑定
Qt.binding
的方法是什么?只需再尝试一件小事,就成功了
function loadTabs() {
var tab_array = tabs.split(",");
for (var i = 0; i < tab_array.length; i ++) {
var dirTableView = Qt.createComponent("dirview.qml");
var newTab = tabView1.addTab("", dirTableView);
newTab.active = true;
newTab.item.folderUrl = "file://" + tab_array[i];
newTab.title = Qt.binding(function() {
return this.item.folderUrl.toString().replace("file://", "");
});
}
}
函数加载选项卡(){
var tab_array=tabs.split(“,”);
对于(var i=0;i
唯一的更改是在绑定表达式中,newTab
被this
替换。灵感来自
显然,使用
this
可以消除歧义,Qt.binding()
确切地知道要引用哪个newTab
。没有歧义,它的作用域规则很奇怪。没有tab_数组。长度numberofnewTab
s,只有一个表达式引用它,它被固定在它的最后一个值上。
function loadTabs() {
var tab_array = tabs.split(",");
for (var i = 0; i < tab_array.length; i ++) {
var dirTableView = Qt.createComponent("dirview.qml");
var newTab = tabView1.addTab("", dirTableView);
newTab.active = true;
newTab.item.folderUrl = "file://" + tab_array[i];
newTab.title = Qt.binding(function() {
return this.item.folderUrl.toString().replace("file://", "");
});
}
}