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
}