在其他页面上执行操作后更改网址

时间:2018-12-11 20:40:22

标签: qt blackberry qml cascade

我有2个文件夹。在文件夹中是1和1文件。 如何使用第二个文件更改一个文件的网址?

资产:     

  • 文件夹01
  •         
      File_01.qml
        
  • 文件夹02
  •         
      Sheet_01.qml
        
  • main.qml

  • main.qml

    import bb.cascades 1.4
    import "Folder_01"
    import "Folder_02"
    TabbedPane {
        Menu.definition: MenuDefinition {
            actions: [
                ActionItem {
                    onTriggered: {
                        sheet_01.open()
                    }
                }
            ]
        }
        Tab {
            id: tab_01
            title: "Tab 01"
            File_01 {
            }
        }
        Tab {
            enabled: false
        }
        attachedObjects: [
            Sheet_01 {
                id: sheet_01
            }
        ]
    }
    

    File_01.qml

    import bb.cascades 1.4
    Page {
        titleBar: TitleBar {
            title: "File 01"
        }
        WebView {
            id: file_01_WebView
        }
    }
    

    Sheet_01.qml

    import bb.cascades 1.4
    import "asset:///Folder_01"
    Sheet {
        id: sheet_01
        Page {
            titleBar: TitleBar {
                title: "Sheet 01"
                dismissAction: ActionItem {
                    title: "Cancel"
                    onTriggered: {
                        sheet_01.close()
                        file_01_WebView.url = "http://google.com"
                    }
                }
            }
        }
    }
    

    我在文件“ Sheet_01.qml”中出现错误“ file_01_WebView.url =” http://google.com

    2 个答案:

    答案 0 :(得分:0)

    这里已经讨论了很多次,并且Qt文档对此非常清楚。 由于范围限制,Sheet_01项对组件外部的元素一无所知。 遵循声明式的开发风格,组件应告知其状态更改,以便其他项目可以对此做出反应。例如:

    main.qml

    Item {
        id: root
        MyItem {
            id: item1
        }
    
        MyItem {
            id: item2
            onSomeEvent: item1.doSomeAction();
        }    
    }
    

    MyItem.qml

    Item {
        id: item
        signal someEvent();
        function doSomeAction() {
            console.log("action executed");
        }
        Component.onComplete: item.someEvent();
    }
    

    答案 1 :(得分:0)

    我很高兴。我为其他人完成了此问题的用户手册。 这是一个功能过程。

    // main.qml
    import bb.cascades 1.4
    import "Folder_01"
    import "Folder_02"
    
    TabbedPane {
    
        Menu.definition: [
    
            MenuDefinition {
    
                actions: [
    
                    ActionItem {
    
                        onTriggered: {
                            sheet_01.open()
                        }
                    }
                ]
            }
        ]
    
        tabs: [
    
            Tab {
                title: "Tab 01"
    
                File_01 {
                    id: file_01
                }
            },
    
            Tab {
                enabled: false
            }
        ]
    
        attachedObjects: [
    
            Sheet_01 {
                id: sheet_01
    
                onSignal_From_Sheet: {
                    file_01.url = "http://google.cz"
                }
            }
        ]
    }
    
    // File_01.qml
    import bb.cascades 1.4
    
    Page {
        id: page1
    
        property alias url: file_01_WebView.url
    
        titleBar: TitleBar {
            title: "File 01"
        }
    
        WebView {
            id: file_01_WebView
        }
    }
    
    
    // Sheet_01.qml
    import bb.cascades 1.4
    
    Sheet {
        id: sheet_01
    
        signal signal_From_Sheet()
    
        Page {
    
            titleBar: TitleBar {
                title: "Sheet 01"
    
                dismissAction: ActionItem {
                    title: "Cancel"
    
                    onTriggered: {
                        signal_From_Sheet()
                        sheet_01.close()
                    }
                }
            }
        }
    }