Объединенный объект недоступен в self.play - PullRequest
1 голос
/ 25 сентября 2019

Мой виджет соединяет объект с joinByOne, но присоединенный объект недоступен в self.play в public/js/always.js (только его идентификатор).Он доступен в views/widget.html, хотя.

// index.js
{
  name: 'groups',
  type: 'array',
  schema: [
    name: 'buildings',
    type: 'array',                                 
    schema: [                                               
      {
        name: '_building',                              
        label: 'Building',                              
        type: 'joinByOne',                              
        withType: 'building',                           
        required: true,                                 
        filters: {                                      
          projection: {                               
            title:1,                                
            latitude:1,                             
            longitude:1,                            
            _url: 1                                 
          }                                           
        }                                               
      }
    ]
  ]
}

В views/widget.html присоединенные объекты доступны, как и ожидалось.

// views/widget.html
<div class="map" data-groups='{{ data.widget.groups | jsonAttribute({ single:true }) }}'></div>

В консоли браузера $('.map').data('groups')[0].buildings[0]._building содержит присоединенный объект, как и ожидалось.

В self.play, с другой стороны, data.groups[0].buildings[0] содержит только builgindId, но не фактический _building.

// public/js/always.js
apos.define('map-widgets',{
  extend: 'apostrophe-widgets',
  construct: function(self,options) {
    self.play = function($widget,data,options) {
      console.log(data.groups[0].buildings[0])
    }
  }
})

Это регистрирует объектсодержит buildingId объединенного объекта, но не _building, т.е. сам объект.

Похоже, что соединение не было выполнено в объекте, доступном в data в self.play.Это специально?

Как получить доступ к объединенному объекту в self.play?

1 Ответ

2 голосов
/ 25 сентября 2019

По умолчанию фильтрации объединяются из data, но вы можете переопределить функцию фильтрации для каждого виджета и, по сути, обойти фильтрацию.

В index.js вашего модуля виджетов

construct: function(self, options) {
   // ... other stuff
   self.filterForDataAttribute = function (widget) { 
      return widget;
   };
}
...