第1部分–UI5模块延迟加载机制
第2部分–控件呈现程序
第3部分–Html本机事件与UI5语义事件
第4部分–控件元数据
第5部分–控件实例数据–如何实现setXXX和getXXX
第6部分–引擎盖下的控件数据绑定
第7部分–本博客
第8部分–控件ID
第9部分–控件国际化支持
第10部分-XML视图中的按钮控件
第11部分-按钮控件及其底层DOM
在之前的博客中,
我们了解了控件数据绑定的工作原理。在调试期间,我们在源代码中发现有三种支持的绑定模式:单向、双向和一次性。那么在我们的示例中,在下面的一行中到底使用哪种绑定模式呢?
执行oButton1.bindProperty("text","/field_for_text")后
何时何地确定绑定模式,我们可以在调试器中发现使用了"双向"模式:
它是在我们在上一个博客中调试的函数bindProperty()中填充的。
这个默认值是在模型的构造函数中填充的:
双向绑定是如何工作的
为了测试双向绑定模式,我在我的示例应用程序下面添加了一行新行。
在第24行中,Button的text属性绑定到具有绑定模型"TwoWay"的模型字段"field\u for \u text"。顾名思义,在第26行,我将button text属性改为"change via JS",因此我希望模型字段"field\u for\u text"的值也会自动更改。
这种自动同步的原因实际上也在之前的博客中调试过。在那个博客里,我们知道调用函数setXXX()时,绑定模型字段的值也会在第29711行更新:
在这个函数中,第31453行有一个IF求值,一元云购下载,确保模型字段只能在双向模式下同步。在31457行,什么是淘客,用新的属性值调用绑定实例的setExternalValue函数
在这个函数中,调用了JSONPropertyBinding的setValue函数
然后更改了Model的绑定字段
单向绑定是如何工作的
如果我通过下面的代码显式指定绑定模式为"单向":
那么在我通过setText()函数更改按钮文本属性,连接的模型字段将不会更改,因为下面的31453行签入无法成功。
一次绑定如何工作
在SAP development guide链接中,此模式解释为"从模型绑定到视图一次"。我第一次读了这句话之后,还是没弄明白它的意思。因此,我首先通过下面的测试代码测试"双向"绑定。
在第24行中,我将文本属性绑定到模型字段"field\u for\u text"。
在第26行中,我更改了模型绑定字段,第27行刷新了模型。最后在UI中,我得到一个文本为"Tom"的按钮。
如果我将第24行的绑定模式从"TwoWay"更改为"OneTime",那么我得到一个文本为"Jerry"的按钮。
首先我调试TwoWay是如何工作的。诀窍在第27行函数checkUpdate()。
在这个函数中,存储在JSON模型中的所有绑定信息实例都是循环的。
在双向模式下,由模型字段更改触发的控件属性更改的更新在第49行中完成:this.\u firechange()函数。
此函数最终将调用委托给按钮控件引用:
UpdateProperty将调用setProperty,我们已经在本教程的第5部分详细讨论过了。
现在可以开始了检查一次性绑定模式。将绑定模式更改为OneTime:
然后在oButton1.bindProperty中,分离fModelChangeHandler。此函数在上一章中介绍了\u firechange(),见第一个屏幕截图,返利,
因此,积分返现,对于OneTime模式,此fModelChangeHandler被分离,绑定信息实例也从JSON模型中移除,因此即使Model字段有一些变化,返现网,绑定信息和fModelChangeHandler都不可用,不同步到相应的控件属性。