如何使用attachmentObject填充选项卡

时间:2013-11-28 01:21:11

标签: blackberry blackberry-10 blackberry-cascades

我有TabbedPane个标签。第一个有ListView,当选择列表视图中的元素时,它会打开组成视图的消息。

TabbedPane {
  attachedObjects: [
    ComponentDefinition {
      id: cmp_page
      // ... other UI elements for this page
    }
  ]
  Tab { // First tab
    NavigationPane {
      id: tmp_nav
      Page {
        ListView {
          onTriggered: {
            var pg = cmp_page.createObject()
            tmp_nav.push(pg)
          }
        }
      }
    }
  }
  Tab { // Second Tab whose contents should be "cmp_page"
    id: should_be_cmp_page
    // ... UI elements, the same in cmp page
  }
}

我正试图摆脱这种重复

  1. 让我的代码更小
  2. 减少我必须做的信号槽处理次数
  3. 我尝试了什么

    1. 在第一个标签中的should_be_cmp_page方法中打开onTriggered
      • 错误:TypeError: Result of expression 'should_be_cmp_page.createObject' [undefined] is not a function.
    2. 考虑但未尝试:在标签视图中创建附加对象;但这不是NavigationPane,我不认为将其作为唯一目的就是最理想的解决方案。

2 个答案:

答案 0 :(得分:1)

您不能只调用createObject方法。您必须将其分配给变量。

ListView {
      onTriggered: {
        var page = cmp_page.createObject()
        tmp_nav.push(page)
      }
    }

答案 1 :(得分:1)

我可以为此建议2种解决方案。

“更简单”的解决方案是使用工作表来构成消息撰写视图而不是选项卡。这可以从任何地方打开,然后您可以将值传递到工作表中。

要使用该选项卡,需要一些c ++代码。我最近遇到过类似的问题,当用户点击另一个标签中的元素时,需要打开天气选项卡并在天气选项卡上显示5天的预测。但是,qml不支持打开选项卡。

我在c ++中制作了以下方法:

ApplicationUI.cpp

void ApplicationUI::openTab(QString tabName) {
Tab *mTab = tabbedPane->findChild<Tab*>(tabName);

if (mTab == 0) {
    qDebug() << "Error: unable to open tab " << tabName;
    return;
}

tabbedPane->setActiveTab(mTab);
}

ApplicationUI.hpp

public:
    Q_INVOKABLE void openTab(QString tabName);

然后你可以这样做:

Tab { // First tab
    NavigationPane {
       id: tmp_nav
       Page {
            ListView {
                 onTriggered: {
                     var pg = cmp_page.createObject();
                     messageNav.push(pg);
                 }
            }
       }
    }

}


Tab { // Second Tab whose contents should be "cmp_page"
    NavigationPane {
         id: messageNav
    }
}