Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript for循环中的Qt.binding_Javascript_Qt_Qml_Qt5_Qtquick2 - Fatal编程技术网

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_数组。长度
numberof
newTab
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://", "");
        });
    }
}