2014-08-28 132 views
13

我一直在思考上下文,上下文綁定和綁定上下文的內部和關係,現在我已經有幾天了,我不確定在我這邊是否有一個主要的誤解。也許你們中的一些人可以幫我整理一下。我正在把我的假設放在下面。我可能想首先說我總是在這裏使用oData模型。ui5中的綁定,上下文,上下文綁定和綁定上下文

這是什麼,我相信理解閱讀文檔:

一個背景是在模型中的數據對象的引用。

結合基本上一個事件提供器,其(在單向結合時)觀察到特定的上下文的狀態,並且當它被改變/數據加載發射事件...並因此允許用於登記事件處理程序針對該特定情況下的事件。在編程對象方面,有屬性綁定和列表綁定(這是真的 - 或是列表綁定所有相關的?)。無論如何,我的理解是,列表綁定是組件的聚合綁定的模型端,而屬性綁定既是從組件的角度來看,也是從模型的角度來看(混淆?)。

現在我不太得到的是: 上下文結合new sap.ui.model.ContextBinding(oModel, sPath, oContext, mParameters?, oEvents?):採取的路徑和參數的背景。我假設這個oContext不完全是上面描述的上下文,而是綁定上的一些元數據。它是否正確?或者這是路徑參數相對於路徑的定義?

什麼也似乎很奇怪是當你想創建一個上下文本身new sap.ui.model.Contextabov(oModel, sPath, oContext)再次採用上下文。 我相信這只是我所看到的一個不幸的命名事物,但我不太確定。

然後是contextbinding和bindingcontext。我假設contextBinding是如上所述的對特定上下文的綁定。綁定上下文是關於上下文綁定或列表綁定的元數據。

從編程的角度來看,我不明白爲什麼了以下工作:

  • 創建列表,經由model.bindList()只傳遞一個路徑結合上下文。
  • 附着變更事件處理程序結合
  • 呼叫get_contexts()上結合
  • 接收change事件處理數據(和看到的OData屬性填入的型號)。

而且似乎沒有做同樣的綁定屬性,它我會承擔我可以通過model.bindProperty()產生的方式。我可以生成綁定,但我收到的綁定似乎沒有處理實際獲取數據。

我希望漫步解釋我的問題。如果你問:你想做什麼?我其實不想做任何事情,我只是不太明白這是如何工作的。綁定到UI控件等工作得很好,但我更願意真正理解底層的東西。我一直在閱讀調試文件和單元測試,但與你們討論它似乎也是一個好方法。

如果不清楚,我會很樂意添加任何有用的東西。

乾杯 米歇爾

回答

7

你的問題如下回答。希望能幫助到你。

  1. 現在我不太得到的是:上下文結合新sap.ui.model.ContextBinding(oModel, sPath, oContext, mParameters?, oEvents?):採取的路徑和上下文作爲參數。我假設這個oContext不完全是上面描述的上下文,而是綁定上的一些元數據。它是否正確?或者這是路徑參數相對於路徑的定義?

    oContext是您在上面提到的背景,確切地說,是sap.ui.model.Context

  2. 什麼也似乎很奇怪是當你想創建一個上下文本身新sap.ui.model.Context(oModel, sPath, oContext)再次採取上下文。我相信這只是我所看到的一個不幸的命名,但我不太確定。

    我猜你的文檔here困惑。實際上,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" 
        ] 
    } 
    
    }); 
    
  3. 從編程的角度來看,我不明白爲什麼了以下工作:

    創建列表,經由model.bindList()只傳遞路徑結合上下文。
    將更改事件處理程序綁定到綁定
    在綁定時調用get_contexts()
    在更改事件處理程序中接收數據(並查看在模型中填充的oData屬性)。

    似乎沒有辦法做同樣的屬性綁定,我會假設
    我可以通過model.bindProperty()生成。我可以生成綁定,但綁定接收似乎沒有處理來實際獲取數據。

    其實你也可以attachChange事件到sap.ui.model.PropertyBinding,你可以調用getValue()來獲取數據。

2

謝謝,艾倫,真的有幫助。這實際上主要是關於文檔的一個混淆,getValue也是如此。

爲了另一個答案加起來也只有隱含在標題中的問題:

方面結合:綁定設置了給定的路徑。

綁定上下文:給定綁定的上下文,即來自組件或某些其他設置綁定的上下文。

Cheers Michel