我几天来一直在思考上下文,上下文绑定和bindingcontext之间的内部和关系,我不确定我是否存在重大误解.也许你们中的一些人可以帮助我解决这个问题.我将我的假设放在下面.我可能想首先说我总是在这里使用oData模型.
这是我相信阅读文档的理解:
甲上下文是在一个模型中的数据对象的引用.
阿结合基本上是一个事件提供器,其(在单向结合时)观察到特定的上下文的状态,并且当它被改变/数据加载发射事件...并因此允许在该特定上下文注册的事件处理程序的事件.在编程对象方面,有属性绑定和列表绑定(这是真的 - 还是列表绑定所有相关的?).
无论如何,我的理解是列表绑定是组件聚合绑定的模型端,而属性绑定从组件和模型的角度被称为属性绑定(令人困惑?).
现在我不太了解的是:上下文绑定new sap.ui.model.ContextBinding(oModel, sPath, oContext, mParameters?, oEvents?):将路径和上下文作为参数.我假设这个oContext不完全是上面描述的上下文,但是关于绑定的一些元数据.它是否正确?或者这是路径参数相对于的p ath的定义?
当你想要创建一个上下文本身new sap.ui.model.Contextabov(oModel, sPath, oContext)再次获取一个上下文时,看起来也很奇怪.我相信这只是我看到的一个不幸的命名事项,但我不太确定.
然后是contextbinding和bindingcontext.我假设contextBinding是对特定上下文的绑定,如e所述.而bindingcontext是关于上下文或列表绑定的元数据.
从编程的角度来看,我不明白为什么以下工作:
model.bindList()仅传递路径来创建列表绑定到上下文.get_contexts()绑定似乎没有办法对属性绑定做同样的事情,我认为我可以通过它生成model.bindProperty().我可以生成绑定,但我收到的绑定似乎没有实际获取数据的句柄.
我希望漫步解释我的问题.如果你问:你想做什么?我实际上不想对它做任何事情,我只是不太明白这是如何工作的.绑定到ui控件等工作得很好,但我更愿意真正了解引擎盖下的内容.我一直在阅读调试文件和单元测试,但与你们讨论它似乎也是一个很好的方法.
如果不清楚,我会很乐意添加任何有用的东西.
干杯米歇尔
您的问题在下面得到解答.希望能帮助到你.
现在我不太了解的是:上下文绑定new sap.ui.model.ContextBinding(oModel, sPath, oContext, mParameters?, oEvents?):将路径和上下文作为参数.我假设这个oContext不完全是上面描述的上下文,但是关于绑定的一些元数据.它是否正确?或者这是路径参数相对于的p ath的定义?
oContext是你上面提到的上下文,确切地说,是sap.ui.model.Context.
同样看起来很奇怪的是,当你想要创建一个上下文时,new sap.ui.model.Context(oModel, sPath, oContext)会再次获取一个上下文.我相信这只是我看到的一个不幸的命名事项,但我不太确定.
我想这里的文档让你很困惑.实际上,sap.ui.model.Context仅将oModel和sPath作为参数.以下代码是我从sap-ui-core.js获得的代码.您可以看到有关参数的JSDoc部分实际上与代码不一致.也许那里有某种错字.
/**
* Constructor for Context class.
*
* @class
* The Context is a pointer to an object in the model data, which is used to
* allow definition of relative bindings, which are resolved relative to the
* defined object.
* Context elements are created either by the ListBinding for each list entry
* or by using createBindingContext.
*
* @param {sap.ui.model.Model} oModel the model
* @param {String} sPath the path
* @param {Object} oContext the context object
* @abstract
* @public
* @name sap.ui.model.Context
*/
var Context = sap.ui.base.Object.extend("sap.ui.model.Context",
/** @lends sap.ui.model.Context.prototype */ {
constructor : function(oModel, sPath){
sap.ui.base.Object.apply(this);
this.oModel = oModel;
this.sPath = sPath;
},
metadata : {
"abstract" : true,
publicMethods : [
"getModel", "getPath", "getProperty", "getObject"
]
}
});
Run Code Online (Sandbox Code Playgroud)从编程的角度来看,我不明白为什么以下工作:
通过仅传递路径的model.bindList()创建列表绑定到上下文.
将更改事件处理程序附加到绑定
调用get_contexts()绑定
接收更改事件处理程序中的数据(并查看模型中填充的oData属性).
似乎没有办法对属性绑定做同样的事情我假设
我可以通过model.bindProperty()生成.我可以生成绑定,但我
收到的绑定似乎没有实际获取数据的句柄.
实际上你也可以attachChange事件sap.ui.model.PropertyBinding,你可以调用getValue()来获取数据.