two-way 双向数据绑定
控制器(Model)的数据发生了变化,相应的view的数据也做出了改变。反之亦然。
one-way 单向数据绑定
控制器(Model)的数据发生了变化,相应的view的数据也做出了改变。而view数据的改变则不会影响到model
one-time 单次数据绑定
只进行一次数据绑定,model与view的数据改变都不会影响实际的数据改变。
占用内存比
one-time<one-way<two-way
使用方法
new sap.ui.model.json.JSONModel()
new sap.ui.model.odata.ODataModel()
=>
oModel.setDefaultBindingMode(“OneWay”);
默认不指定状态
Model version
V4 JSON model XML model two-way
V2 one-way
Resource model One-time
下面我们来看一个DEMO
首先我们在view 页创建一个input和一个label,里面传值为Name
<Input value="{/name}"></Input>
<Label text="{/name}"/>
<Button text="updata data" press="onPress"></Button>
然后我们在控制层建一个假数据,给他一个值WILL
我们先把他的绑定方式设置为TwoWay
var model = new sap.ui.model.json.JSONModel();
model.setDefaultBindingMode("TwoWay");
model.setData({name:"WILL"});
this.getView().setModel(model);
RUN后我们会发现
如果我们在input框更改值得话,在取消选中后,下面的label值也做出了相应的改变。
如果我们想做到动态同时改变的话,需要给他一个onChange方法。
相应的,如果我们把绑定方式更改为OneWay后,我们再更改input里的值,label还是最初的原值。
于是这里,我们再加入一个button
<Button text="updata data" press="onPress"></Button>
我们写一个function,期望于我们在控制层赋予一个新值点击后label更改。
this.getView().getModel().setProperty('/name',"ROCK");
RUN后观察我们会发现,再OneWay的情况下,我们再更改input里的值,label还是最初的原值。
但如果点击button,label就会改变成我们控制层赋予的值。
由此可知,OneWay方式只有控制层的model改变才会改变,而view页不影响。
那最后还有一个方式,“OneTime”
更改RUN后发现,这次连Button也失效了。
由此可知,OneTime仅一次在加载View时,绑定一次初始值。之后的更改全部失效。