Привязка контекста, ContextBinding и восстановления команда bindingcontext в ui5

Я размышлял о внутренних и взаимосвязи между контекстом, contextbinding и bindingcontext в течение нескольких дней, и я не уверен, есть ли серьезное заблуждение на моей стороне. Может, кто-нибудь из вас поможет мне разобраться. Я излагаю свои предположения ниже. Сначала я хотел бы сказать, что я всегда работаю с моделями oData здесь.

это то, что я считаю, чтобы понять, читая документацию:

A контекст ссылка на объект данных в модели.

A обязательные в основном поставщик событий, который (в случае односторонней привязки) наблюдает за состоянием определенного контекста и выдает события при его изменении/загрузке данных ... и поэтому позволяет регистрировать обработчики событий для событий в этом конкретном контексте. С точки зрения объектов программирования существуют привязки свойств и привязки списка (это правда - или привязка списка-все, что когда-либо имело значение?).

во всяком случае, мой понимаю, что список привязки модели на стороне компонента агрегации привязки, а привязка свойство называется свойство привязки как от компонента и точки модели зрения (путаете?).

<!--5--вот чего я не вкурил это: Контекстная привязка new sap.ui.model.ContextBinding(oModel, sPath, oContext, mParameters?, oEvents?): принимает путь и контекст в качестве параметра. Я предполагаю, что этот oContext-это не совсем контекст, описанный выше, но некоторые метаданные привязки. правильно ли это? Или это определение thep ath, относительно которого параметр path?

что также кажется странным, когда вы хотите создать контекст сам new sap.ui.model.Contextabov(oModel, sPath, oContext) снова берет контекст. Я считаю, что это просто неудачное название, на которое я смотрю, но я не совсем уверен.

тогда есть contextbinding и bindingcontext. Я бы предположил, что contextBinding является привязкой к определенному контексту, как описано e. И bindingcontext-это метаданные относительно контекста или списка обязательный.

С точки зрения программирования, я не понимаю, почему следующие работы:

  • создать привязку списка к контексту через model.bindList() проходя всего пути.
  • присоединить обработчик событий изменений к привязке
  • вызов get_contexts() обязательные
  • получать данные в обработчике событий изменения (и см. свойство oData, заполненное в модели).

и там, кажется, нет способа сделать то же самое для свойства привязка, которую я предполагаю, я могу создать через model.bindProperty(). Я могу создать привязку, но привязка, которую я получаю, похоже, не имеет дескриптора для фактического извлечения данных.

Я надеюсь, что бродяжничество объясняет мою проблему. На случай, если вы спросите: что вы хотите делать? Я на самом деле не хочу ничего делать, я просто не совсем понимаю, как это работает. Привязка к элементам управления ui и так далее работает отлично, но я бы предпочел действительно понять, что находится под капотом. Я читал файлы отладки и модульные тесты немного, но обсуждение этого с вами, ребята, кажется отличным способом.

если это неясно, я с радостью добавлю все, что поможет.

Ура Мишель!--6-->

2 ответов


на ваши вопросы даны ответы ниже. Надеюсь, это поможет.

  1. теперь я не совсем понимаю: контекст привязки new sap.ui.model.ContextBinding(oModel, sPath, oContext, mParameters?, oEvents?): принимает путь и контекст в качестве параметра. Я предполагаю, что этот oContext-это не совсем контекст, описанный выше, но некоторые метаданные привязки. правильно ли это? Или это определение thep ath, к которому относится параметр path?

    oContext-это контекст, который вы упомянули выше, чтобы быть точнее, это sap.ui.model.Context.

  2. что также кажется странным, когда вы хотите создать себе новый контекст sap.ui.model.Context(oModel, sPath, oContext) снова берет контекст. Я считаю, что это просто неудачное название, на которое я смотрю, но я не совсем уверен.

    Я думаю, документация здесь запутался ты. На самом деле, в SAP.пользовательский интерфейс.модель.Контекст принимает только 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. С точки зрения программирования, я не понимаю, почему следующие работы:

    создать привязку списка к контексту с помощью модели.bindList() передав путь только.
    присоединить обработчик событий изменения к binding
    вызов get_contexts () при привязке
    получение данных в измените обработчик событий (и см. свойство oData, заполненное в модели).

    и, похоже, нет способа сделать то же самое для привязки свойств, которую я бы предположил
    Я могу генерировать через модель.bindProperty(). Я могу создать привязку, но привязка I
    receive, похоже, не имеет дескриптора для фактического извлечения данных.

    на самом деле вы можете также attachChange событие sap.ui.model.PropertyBinding, и вы можете вызвать getValue () для получения данных.


спасибо, Аллен, это действительно помогло. Это действительно была путаница в отношении документации, и getValue также проскользнул меня.

чтобы добавить еще один ответ на вопрос, только неявно включенный в заголовок:

контекст привязки: привязка, которую вы установили к заданному пути.

привязка контекста: контекст данной привязки, т. е. при поступлении из компонента или какой-либо другой настройки обязательный.

Ура Мишель!--1-->