只能使用绑定的DataSet进行XML表达式绑定?

时间:2017-02-06 14:33:38

标签: sapui5

在我的应用程序中,我有一个带有员工选择的主视图(绑定到实体集EmployeesList)和一个Entry视图,我在其中向所选员工添加一些数据(绑定到AttAbsType)。

我想根据字段" schkz"在Entry视图中显示或隐藏一些字段。在EmployeesList实体集中。是否可以从DataSet访问不同于绑定到当前视图的值?

屏幕逻辑是:

  1. 员工选择视图(读取包括schkz值的基本数据)
  2. 详细信息视图以显示现有条目
  3. 用于添加新条目的条目视图。在这里,我想使用所选员工的schkz值来显示/隐藏字段。
  4. 整个模型的图像: Odata model

    在控制台中,我可以测试即使我在条目视图中输入了值:

    sap.ui.getCore().getModel("schkz");
    

    但在详细信息视图中,我无法直接将此值用于表达式绑定。我试过这样:

    查看:

    <Input id="__input0" visible="{= ${schkz} === 'NORM' }"/>
    

    即使我将值复制到隐藏标签并尝试使用该标签,它也不起作用:

    控制器:

    this.byId("_label21").setText(schkz);
    

    查看:

    visible="{= ${_label21} === 'NORM' }"
    

    我可以在屏幕上看到该值,但表达式绑定无法使用它。这只是为了测试我真的可以从核心访问该值。

    这是否只能使用表达式绑定?如果没有,最简单的方法是什么?将字段添加到AttAbsTypeSet,即使它在逻辑上不属于那里?或者在控制器中完成整个操作并隐藏/显示那里的字段?

    感谢任何提示! :)

1 个答案:

答案 0 :(得分:0)

在从主视图到详细信息视图的路由过程中,您可以传递参数。它们将作为navTo函数中的参数对象传递。

this.getRouter().navTo("DetailsScreen", {selectedMasterId: <PlaceIdHere>});

然后,在详细信息屏幕控制器上,您可以读取此参数并相应地设置详细信息屏幕。

我会通过将DetailsMatched事件附加到Details Controller上的Init方法来实现这一点,如下所示:

onInit: function () {
    this.getRouter().getRoute("Details").attachPatternMatched(this.onPatternMatched, this);
}


onPatternMatched: function (oEvent) {
    var thePassedID = oEvent.getParameter("arguments").selectedMasterId;
    // Do logic with the ID next.
}

为此,您需要在清单文件中定义参数。

"routing": {
    ...
    "routes" : [
        ...
        {
            "pattern": "Details/{selectedMasterId}"
            "name": "Details"
            "target": "Details"
        }]
    ...
    }

此参数在URL中传递,并且可由用户在地址栏中读取,因此根据您的目的,这可能不太理想。

从这里开始,您可以根据您要显示的记录的ID来设置绑定,并且详细信息视图中的绑定可能与以这种方式设置的数据模型相关。