- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
正如标题所说,我有一个关于最佳实践/良好编码范围的简单问题。在我的组件中,我经常需要从 View 中访问元素。所以现在我想知道,是否应该使用 sap.ui.getCore().byId(ID)
方法来获取我的元素或 this.getView().byId(ID )
运算符。我想也许无论我选择哪两个,但我想更多地了解整个 sapui5 内容,也许有一种答案方式更喜欢一个解决方案。
编辑:也许我对我的要求不够清楚,现在它被纠正错了。我的问题是在组件的范围内。所以我想知道我是否应该通过 this
运算符或 sap.ui.getCore().byId(ID)
访问我的元素。我知道 this 运算符是什么等等,但我不知道哪个变体“更清晰”:
最佳答案
从当前 View 访问元素:
this.getView().byId(...)
从不属于当前 View 的另一个 View 访问元素(它不是嵌套 View ):
sap.ui.getCore().byId(...)
在我看来:如果你必须做后一个,你就做错了。通常,为了避免 id 冲突,所有 id 都应该加上前缀(自动完成,除非这是行为被覆盖)。这样做的缺点是您通常不知道前缀会是什么样子,因此上述语句对您没有多大帮助。
替代方案:
可以通过 SAPUI5 事件总线处理跨 Controller 通信。然后订阅者处理 View 的更新。 View 的修改应始终由 View 的 Controller 处理。所以: Controller C1 修改 V1 = ok,C2 修改 V2 ok,C2 修改 V1 -> 坏主意。
使用数据绑定(bind)。很多人有时似乎忘记了它不仅可以用来绑定(bind)值,还可以用来绑定(bind)如下的东西。下面的例子可以适应很多不同的问题:
//反模式 - 您必须对所有输入字段执行此操作
//这很快就会变得非常不方便。
this.getView().byId("myInput").setEnabled(false)。
这实际上是一种不好的方法。更好的方法是拥有一个模型——比如说“pageState”并将元素“启用”属性绑定(bind)到这个模型。例如。像这样:
<Input enabled="{pageState>/inputFieldsEnabled} ... />
然后在 Controller 中
this.getModel("pageState").setProperty("/inputFieldsEnabled", false);
关于this - .this 或 sap.ui.getCore().byId(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37653107/
使用时能知道区别和性能吗: const myControl = this.getView().byId("myIDhere"); const myControl = this.byId("myIDhe
我有一个ID为appointment_stylist_id的选择字段。由于某种原因,第一个返回我的元素,但是第二个返回undefined: console.log(dojo.byId('appoi
我是 dojo 工具包的初学者。我知道 dojo.byId() 函数类似于 JavaScript 的 document.getElementById() 但我不明白 dom.byId( 有什么用)。
我是 dojo 工具包的初学者。我知道 dojo.byId() 函数类似于 JavaScript 的 document.getElementById() 但我不明白 dom.byId( )。 谁能解释
每次尝试获取页面中元素的值时,都会出现未定义的错误:我已尝试 dijit.byId('myid').innerHTML('loading...') ; 我得到一个错误但是当我使用 jquery 做同样
当我在客户端为我的一个应用程序进行验证时。我脑子里有这些问题。 问题一:dijit.byId('someId').value 和 dijit.byId('someId').get('value') 有
我有一个工作正常的日历小部件。我遇到的问题是选择日期时 - 代码找不到我想要设置为所选日期的字段,而且我不明白为什么不这样做。 require([
我正在尝试访问已作为模板添加到小部件中的内容 Pane ,但我似乎可以使用registry.byId 来获取它: 我的模板——我正在尝试访问div“ map ”: im a map
正如标题所说,我有一个关于最佳实践/良好编码范围的简单问题。在我的组件中,我经常需要从 View 中访问元素。所以现在我想知道,是否应该使用 sap.ui.getCore().byId(ID) 方法来
我有两个 Controller 和一个 XML 文件。我想从第一个 Controller 调用第二个 Controller 的函数。该函数应该更改与第二个 Controller 关联的 xml 文件的
我有一个带有 dojo 代码的网页,其中包含一个传递给 dojo.addOnLoad 的函数,代码如下: laborDetailHandler.RevenueTotalInput = dojo.byI
我是 react 和 redux 的新手,尝试使用 api 获取数据,但尝试通过 id 获取,不幸的是,id在 redux 记录器中未定义,服务器端没有返回结果, 这是我的代码 我的路线 Actio
这是我的 HTML,它存在且有效。当我使用 WebStorm 中断测试用例时,我可以检查页面并看到这个元素就好了... Privacy Policy 这是我的 Jasmine 测试,它找不到元素。 i
早上好!我似乎找不到 dijit 的 ById.Set() 函数的第三个参数是什么或者它是如何工作的。在下面的示例中,我现在负责维护的代码是将元素的 value 属性设置为表单上传递的值。问题是假的意
尝试使用registry.byId 设置内容 Pane 的内容,但我无法获取该对象 - 我收到以下错误: JavaScript 运行时错误:无法获取未定义或 null 引用的属性“集” 我的代码是这样
这是我的简单 dojo 示例: ShowMovies require( [ "dojo", "dojo/parser", "dijit/layout/BorderCo
假设我的 DOM 看起来像这样 link link link 要检查 Javascript 内链接的点击情况,我可以编写 var nav = document.getEle
我有一个函数,可以将 div 作为子元素添加到 dijit/layout/conentpane 中。我遇到的问题是,添加此 div 后,我无法使用 dom.byId 引用它:创建此 div 的函数是从
我需要查看registry.byId ( http://dojotoolkit.org/reference-guide/1.10/dijit/registry.html ) 返回的小部件。 我可以从r
我想在playframework 2.4中使用ebeans方法的'byId()'; 程序返回“找不到符号 byId()”。 但是,'.all()'方法可以工作并获取数据。(我想知道为什么)。 这是一个
我是一名优秀的程序员,十分优秀!