【问题标题】:UI5: get path for new object in modelUI5:获取模型中新对象的路径
【发布时间】:2018-03-16 10:07:32
【问题描述】:

我经常遇到某种主从情况,我尝试对主视图和详细视图使用单个模型。

当您选择列表中的项目时,详细信息页面会直接绑定到列表中的元素.bindElement(path)。该路径可从绑定上下文中获得。每个人都很高兴:

//click handler for list item:
var context = this.getBindingContext();
oDetailPage.bindElement(context.getPath());
oApp.toDetail(oDetailPage);

挑战在于列表页面是否有“添加”按钮。我创建了一个新对象并将其放入模型中。但是如何找到路径?我没有上下文:

//click handler for "add" button
var newStuff = {
  propA: "foo",
  propB: 13
};
oModel.setData(oModel.getData().concat(newStuff));
oDetailPage.bindElement(/* What??? */);
oApp.toDetail(oDetailPage);

我已经搜索了.findPath(newStuff) 方法,但不存在这样的东西

【问题讨论】:

    标签: sapui5


    【解决方案1】:

    您好,很遗憾我无法对此进行测试,但我认为这应该可以工作

    绑定路径几乎是指向集合中特定条目的指针。路径值确实取决于几个变量,例如模型的结构。

    例如,如果模型数据如下所示:

    {"results" : [
                {propA: "foo",
                 propB: 13
                },
                {propA: "ber",
                 propB: 14
                }]
    

    }

    你连接

    {propA: "newItem",
     propB: 15
    }
    

    我相信你的绑定路径会是

    "/results/2"
    

    您还可以使用类似的内容查找最新索引

    this.getModel("yourModel").getObject("results").length;
    

    编辑 - 除非我错过了理解您的问题,否则您的新条目应该在模型的末尾。

    【讨论】:

    • 我还观察到数字路径与底层数组中的索引匹配,但在文档中没有找到任何验证。如果这确实是我可以指望的东西,那就太好了:)这是一个可行的解决方案
    • 我认为你的例子中的路径是"/results/2"though,因为它们是从零开始的
    【解决方案2】:

    这里有两种情况

    //click handler for "add" button
    var newStuff = {
      propA: "foo",
      propB: 13
    };
    
    // case 1: root of model data is an array
    var oData = oModel.getProperty("/");
    oData.push(newStuff);
    oDetailPage.bindElement("/" + oData.length - 1);
    
    // case 2: we appends to /results
    var oData = oModel.getProperty("/results");
    oData.push(newStuff);
    oDetailPage.bindElement("/results/" + oData.length - 1);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      • 1970-01-01
      • 2021-05-31
      • 2021-10-24
      • 1970-01-01
      相关资源
      最近更新 更多