【问题标题】:SAPUI5 Expression BindingSAPUI5 表达式绑定
【发布时间】:2016-02-20 09:14:23
【问题描述】:

是否可以将控件属性绑定到具有动态属性名称的模型,例如存储在另一个模型字段中?我认为我们可以为此目的使用 SAPUI5 Expression Binding,但它不起作用:跟踪窗口中的绑定被破坏,并且似乎根本没有评估表达式。

XML 视图

<TextArea value="{= ${StackOverflow>/bindTextAreaTo} }" />

控制器

oModel = this.getView().getModel("StackOverflow");

/*
 * The model have two properties: question and comment
 * I want value of TextArea to be bound to one of them based on some condition
 */

oModel.setProperty("/question", "");
oModel.setProperty("/comment", "");

oModel.setProperty("/bindTextAreaTo", 
    bAsk ? "StackOverflow>/question" : "StackOverflow>/comment" );

【问题讨论】:

    标签: data-binding sapui5


    【解决方案1】:

    不,目前不可能。

    但是,对于您想要做的事情,有一个简单的解决方法(见下文)。 基本上,您创建一个视图模型并在模型上设置一些布尔值。然后在你的表达式绑定中使用这个标志来“动态地”定义应该使用什么模型的什么属性......

    XMLView

    <TextArea value="{= ${view>/ask} ? ${StackOverflow>/question} : ${StackOverflow>/comment} }" />
    

    控制器

    var oModel = this.getView().getModel("StackOverflow");
    oModel.setProperty("/question", "");
    oModel.setProperty("/comment", "");
    //...
    
    var oViewModel = new sap.ui.model.json.JSONModel();
    this.getView().setModel(oViewModel, "view);
    //...
    
    oViewModel.setProperty("/ask", bAsk);
    

    【讨论】:

    • 感谢您的回答。我还用类似的方法找到了另一个 SO 答案stackoverflow.com/questions/34653740/…
    • 好吧,这个解决方法只适用于两个值,但如果一个值有 100 种可能性呢?
    猜你喜欢
    • 2016-06-15
    • 2016-10-25
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    相关资源
    最近更新 更多