就像标题所说,我在最佳实践/良好编码的范围内有一个简单的问题.在我的组件中,我经常需要从视图中访问元素.所以现在我想知道,如果我应该使用这个sap.ui.getCore().byId(ID)方法来获取我的元素或this.getView().byId(ID)运算符.我想也许这不管我选择哪两个,但我想了解更多有关整个sapui5内容的信息,也许有一种方法可以选择一种解决方案.
编辑:
也许我对我的要求不够清楚,现在纠正错了.我的问题在于组件的范围.所以我想知道我是否应该由this运营商或通过运营商访问我的元素sap.ui.getCore().byId(ID).我知道这个运算符是什么等等,但我不知道,哪个变体"更清晰":
从当前视图访问元素:
this.getView().byId(...)
Run Code Online (Sandbox Code Playgroud)
从另一个视图访问元素,该视图不是当前视图的一部分(它不是嵌套视图):
sap.ui.getCore().byId(...)
Run Code Online (Sandbox Code Playgroud)
在我看来:如果你必须做后者你做错了什么.通常,为了避免id冲突,所有id都应该加上前缀(自动完成,除非这是行为被覆盖).这样做的缺点是你通常不知道前缀会是什么样子,因此上述陈述对你没有多大帮助.
备择方案:
可以通过SAPUI5事件总线处理跨控制器通信.然后订户处理视图的更新.View的修改应始终由视图的控制器处理.所以:控制器C1修改V1 = ok,C2修改V2 ok,C2修改V1 - >坏主意.
使用数据绑定.许多人有时似乎忘记了它不仅可以用于绑定值,还可以用于下面.以下示例可以适应许多不同的问题:
// anti-pattern - you will have to do this for all input fields
// which becomes very unhandy very quick.
this.getView().byId("myInput").setEnabled(false).
这实际上是一种糟糕的方法.更好的方法是拥有一个模型 - 让我们说"pageState"并将元素"enabled"-property绑定到此模型.像这样:
<Input enabled="{pageState>/inputFieldsEnabled} ... />
Run Code Online (Sandbox Code Playgroud)
然后在控制器中
this.getModel("pageState").setProperty("/inputFieldsEnabled", false);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5736 次 |
| 最近记录: |