【问题标题】:SAPUI5 get current context in detail viewSAPUI5 在详细视图中获取当前上下文
【发布时间】:2014-06-20 10:15:48
【问题描述】:

我有一个带有主视图和详细视图的 SAPUI5 拆分应用程序。

当我在侧栏中选择一个项目时,我将上下文传递给详细视图,比如说产品 1

onSelectProduct: function(evt){
    sap.ui.getCore().getEventBus().publish("app", "refreshProductDetail", {context : evt.getSource( ).getBindingContext()});   

},

这会触发以下绑定上下文的函数:

refresh: function(channelId, eventId, data){
    if (data && data.context) {
        this.getView().setBindingContext(data.context);
    }
},

现在,当我执行保存之类的操作时,我想获取模型中产品 1 的当前数据。

但是,当我使用

this.getView().getBindingContext().getModel()

它返回包含所有产品的模型。我如何知道用户当前正在查看哪一个?

【问题讨论】:

    标签: sapui5


    【解决方案1】:

    您可以使用 bindingContext 的getPath() 来查看当前显示的对象:

    this.getView().getBindingContext().getPath();
    

    你可以这样做:

    var bindingContext = this.getView().getBindingContext();
    var path = bindingContext.getPath();
    var object = bindingContext.getModel().getProperty(path);
    

    如果您只想要显示对象的某个属性,您可以执行以下操作:

    var property = bindingContext.getProperty("<nameOfProperty>");
    

    返回特定上下文中对象的属性。

    更新:

    您可以简单地调用 bindingContext 的 getObject(),它返回当前上下文指向的模型中的对象:

    var object = bindingContext.getObject();
    

    请参阅documentation of Context 了解更多信息。

    【讨论】:

    • 我使用您的 bindingContext/path/object 调用并在之后添加 console.log(object);。在 Chromes 控制台中,我现在可以看到对象的内容,以及它具有的所有属性。但是当我尝试访问这样的属性时:console.log(object.Id); 我得到undefined。知道为什么会这样吗?
    • @Deftoned:有时我在从模型中调试对象时会遇到这个问题。这可能是因为您持有指向对象的指针而不是对象副本。您可以尝试在从 bindingContext 检索对象后立即停止程序并读取它,而不是将其记录到控制台。
    【解决方案2】:

    对于列表项“选择”事件,要从绑定上下文中获取当前选定项记录,请使用:。

    evt.getSource().getSelectedItem().getBindingContext("yourModelName").getObject();
    

    【讨论】:

    • 实际上事件 'Select' 已被弃用,而是使用 'selectionChange' 事件。将以下代码用于事件处理程序 var oSelectedItem = oEvent.getParameter("listItem"); oSelectedItem.getBindingContext("yourModelName").getObject();
    • 而“listItem”仅适用于单选。对于多项选择,请使用“listItems”,它返回所选项目的数组
    【解决方案3】:

    您还可以使用参数listItem 从事件中检索BindingPath

     evt.getParameter("listItem").getBindingContextPath();
    

    【讨论】:

    • getBindingContextPath 很遗憾不是公共 API
    猜你喜欢
    • 1970-01-01
    • 2021-06-11
    • 2020-10-30
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    相关资源
    最近更新 更多