【问题标题】:Updating model does not always result in updated view更新模型并不总是导致更新视图
【发布时间】:2015-03-02 00:17:31
【问题描述】:

我正在使用 SAPUI5 制作应用程序,但我遇到了一个问题,即模型的更新没有立即反映在视图中。

一个稍微简化的场景:我创建了一个从模型中获取文本的文本字段:

currentText = new sap.m.Text({
    width: '100%',
    text: '{/currentTrip/perHour}'
});

然后我创建一个选择并附加一个更改处理程序:

sourceSelect.attachChange(oController.changeTripSource);

在该控制器函数中,我正在更新视图模型:

var model = this.getView().getModel().getData();
model.currentTrip.perHour = 5;

我对这个变化事件产生的这个数字所做的所有事情都有效(比如更新一个直接使用这个数字的连通图)。然而,视图本身不会反映模型的变化,直到我采取 another 动作,如按下按钮或其他东西。我不明白为什么会这样,或者是什么触发 UI5 检查模型的更改值并更新视图。有没有人解决这个问题?

【问题讨论】:

  • 查看@matbtt 的答案;您永远不应该直接更新模型属性,始终使用model.setProperty("/path/to/your/property", oSomeData); -- 和 getProperty("/path/to/your/property"); 从模型中检索数据
  • 对于其他读者:这个答案也可能有帮助:stackoverflow.com/a/48157104/5846045

标签: javascript sapui5


【解决方案1】:

为什么不直接在模型上调用setProperty()?由于模型将在内部执行此操作,因此您无需再调用更新绑定。

model.setProperty("/currentTrip/perHour", 5);

顺便说一句,我不明白为什么 updateBindings() 可以工作,而 refresh 不能。两种方法都在幕后调用checkUpdate()

【讨论】:

  • 控件和模型之间的连接是通过绑定对象建立的,如果您将聚合或属性绑定到模型,就会创建该绑定对象。所以每个控件都知道它的绑定。反之亦然,模型也包含其所有绑定的数组。
【解决方案2】:

在数据更新时致电updateBindings() 始终是一个好习惯。试试:

 model.updateBindings()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 2014-02-13
    • 2013-12-02
    相关资源
    最近更新 更多