Blackberry 10 каскадов qml методами

Как загрузить метод, когда я нажимаю кнопку из одного макета qml в другой qml? как у меня есть кнопка editprofile, если я нажимаю кнопку, значит, я хочу показать значения, которые я получил от веб-службы, как это сделать? Кто-нибудь может отправить какую-нибудь идею.? Спасибо

3 ответа

Решение

Вам нужно реализовать этот метод onCreationCompleted

    onCreationCompleted: {
   // call the function, that you need to show first
   // first_display()
   }

Надеюсь это поможет.!!!

Похоже, вы пытаетесь передать данные, полученные из веб-сервиса, из одного представления QML в другое. Панель навигации, где вы используете createObject() построить экран пользовательского интерфейса из файла.qml и вставить новый экран (страницу) в стек просмотра панели навигации, чтобы ваши данные были доступны для пользовательского интерфейса недавно созданной и видимой страницы, я думаю, более конкретное описание, и распространенный способ сделать это.

Чтобы передать ваши данные, объявите свойство в корневом объекте (Page, Container) вашей QML-страницы 'profileview'. Затем в вашем первом файле QML в вашей кнопке onClicked() Функция присваивает переменной результат createObject() на определение QML. Затем вы можете использовать эту переменную, чтобы назначить свои данные свойству на странице "profileview". Ваша кнопка будет выглядеть примерно так:

// Assume you have a Navigation Pane called navPane
// You also have to define a component for your QML file
Button {
  text: "View profile"
  onClicked: {
    var profilePage = profileDefinition.createObject();
    profilePage.myData = webserviceData;
    navPane.push(profilePage);
  }
  attachedObjects: [
    ComponentDefinition {
      id: profileDefinition
      source: "profilePage.qml"
    }
  ]
}

Более подробный полный пример, основанный на примере проекта Cascades Navigation Pane ниже:

main.qml

// Navigation pane project template
import bb.cascades 1.0

NavigationPane {
id: navPane

// This property holds and tracks the created profile page
property Page profilePage

/* This property holds some sample webservice data, in practice 
 * you would load this from the webservice
 */
property variant webserviceData: {
    "name": "John Doe",
    "email": "john.doe@stackru.com",
    "twitter": "@johndoe"
}
Page {
    // page with a button to display profile
    Container {
        layout: DockLayout {
        }
        Label {
            horizontalAlignment: HorizontalAlignment.Center
            verticalAlignment: VerticalAlignment.Top
            text: webserviceData.name
        }
        Button {
            horizontalAlignment: HorizontalAlignment.Center
            verticalAlignment: VerticalAlignment.Center
            text: qsTr("Show Profile")
            onClicked: {
                // show detail page when the button is clicked
                profilePage = profileDefinition.createObject();
                profilePage.myProfileData = webserviceData;
                navPane.push(profilePage);
            }
            attachedObjects: [
                ComponentDefinition {
                    id: profileDefinition
                    source: "profilePage.qml"
                }
            ]
        }
    }
}
onPopTransitionEnded: {
    // Clean up any pages that have been popped, to avoid memory leaks
    if (profilePage == page) {
        page.destroy();
    }
}
}

profilePage.qml

// Navigation pane project template
import bb.cascades 1.0

Page {

/* Our data property
 * Note: A variant is a QVariant Qt type, so it can easily handle different 
 * data types, in our case it is a map.
 * Without the braces to denote that it is an object you will get a TypeError
 * from QML at runtime 
 */
property variant myProfileData: { /*empty object*/ }

// page with profile details
paneProperties: NavigationPaneProperties {
    backButton: ActionItem {
        onTriggered: {
            // Pop this page off the stack and go back
            navPane.pop();
        }
    }
}
Container {
    Label {
        text: qsTr("Profile Page")
        horizontalAlignment: HorizontalAlignment.Center
        textStyle {
            base: SystemDefaults.TextStyles.TitleText
            color: Color.Blue
        }
    }
    Label {
        text: "Name:"
        horizontalAlignment: HorizontalAlignment.Left
    }
    TextField {
        text: myProfileData.name
        horizontalAlignment: HorizontalAlignment.Center
    }
    Label {
        text: "Email:"
        horizontalAlignment: HorizontalAlignment.Left
    }
    TextField {
        text: myProfileData.email
        horizontalAlignment: HorizontalAlignment.Center
    }
    Label {
        text: "Twitter:"
        horizontalAlignment: HorizontalAlignment.Left
    }
    TextField {
        text: myProfileData.twitter
        horizontalAlignment: HorizontalAlignment.Center
    }
}
}

Надеюсь, это поможет вам. Также эти примеры проектов на GitHub могут помочь:

https://github.com/blackberry/Cascades-Samples/tree/master/quotes

https://github.com/blackberry/Cascades-Samples/tree/master/weatherguesser

Если я вас правильно понимаю, вы хотите выполнить действие, когда нажимаете кнопку. Для этого вы можете добавить onClicked метод к вашему Button объект в QML. Пример:

Button {
    text: "View profile"
    onClicked: {
        myProfileInfo.visible = true;
    }
}

Label {
    id: myProfileInfo
    text: "This is my profile"
    visible: false
}
Другие вопросы по тегам