Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更新模型并不总是导致视图更新_Javascript_Sapui5 - Fatal编程技术网

Javascript 更新模型并不总是导致视图更新

Javascript 更新模型并不总是导致视图更新,javascript,sapui5,Javascript,Sapui5,我正在使用SAPUI5创建一个应用程序,但我遇到了一个问题,即模型的更新没有立即反映在视图中 一个稍微简化的场景:我创建了一个文本字段,它从模型中提取文本: currentText = new sap.m.Text({ width: '100%', text: '{/currentTrip/perHour}' }); 然后创建一个选择并附加更改处理程序: sourceSelect.attachChange(oController.changeTripSource); 在该控制

我正在使用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;

我对这个变化事件产生的数字所做的所有事情都像是更新一个直接使用这个数字的连接图。但是,视图本身不会反映对模型的更改,直到我执行另一个操作,如按下按钮或其他操作。我不明白为什么会这样,或者是什么触发UI5检查模型的更改值并更新视图。有人对此有解决办法吗?

每当数据更新时,调用updateBindings始终是一种很好的做法。尝试:

model.updateBindings
在数据更新时调用updateBindings始终是一种良好的做法。尝试:

model.updateBindings 为什么不直接在模型上调用setProperty呢?这样可以避免在模型内部执行更新绑定的多余调用

model.setProperty/currentTrip/每小时,5; 顺便说一下,我不明白为什么updateBindings可以工作,而refresh不能。这两种方法都在幕后调用checkUpdate。

为什么不直接在模型上调用setProperty?这样可以避免在模型内部执行更新绑定的多余调用

model.setProperty/currentTrip/每小时,5;
顺便说一下,我不明白为什么updateBindings可以工作,而refresh不能。这两种方法都在幕后调用checkUpdate。

请参见@matbtt;永远不要直接更新模型属性,始终使用model.setProperty/path/to/your/property,oSomeData;-和getProperty/path/to/your/property;为其他读者从模型中检索数据:这个答案可能也有帮助:参见@matbtt的答案;永远不要直接更新模型属性,始终使用model.setProperty/path/to/your/property,oSomeData;-和getProperty/path/to/your/property;对于从模型中检索数据供其他读者阅读:这个答案可能也有帮助:控件和模型之间的连接是通过绑定对象建立的,绑定对象是在将聚合或属性绑定到模型时创建的。所以每个控件都知道它的绑定。反之亦然,模型也持有其所有绑定的数组。控件和模型之间的连接由绑定对象建立,该对象是在将聚合或属性绑定到模型时创建的。所以每个控件都知道它的绑定。反之亦然,该模型也持有其所有绑定的数组。