Как я могу перерисовать ITHit Ajax File Browser в Angular SPA, когда у меня есть все созданные экземпляры?

По разным причинам я не буду вдаваться в подробности. Я успешно обернул файловый браузер ITHit Ajax внутри Angular Controller, который сам загружается и оборачивается в UI-представление Angular-UI-Router.

Все параметры настраиваются с помощью предыдущих сервисных вызовов (для поддержки облачной среды с изменчивыми URL-адресами), и я даже преодолел все мои проблемы с CORS (Cross Origin Request), и мы подключились к пользовательской реализации Oath2 на сервер DAV. Все это успешно работает с обозревателем файлов ITHit как довольно важный элемент нашей реализации просмотра контента.

На данный момент, когда я перемещаюсь по определенным областям, Angular-ui-router настраивает URL, представление отвечает, а Angular Controller, обертывающий ITHit, реагирует на изменение представления, и (без перезагрузки представления) повторно выбирает соответствующий URL-адрес DAV с доступными командами IT Hit (например, SetSelectedFolderAsync)

Вот моя (надеюсь простая) задача: когда я перемещаюсь в определенные области - Angular-UI-router просто перезагружает содержащий UI-View новым контентом, но когда я возвращаюсь - ITHit Ajax File Browser не перерисовывается.

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

  1. Я бы предпочел не "скрывать" контейнер ITHit (потому что он не имеет значения, и я не хочу управлять его актуальностью по мере изменения состояния в представлении. Эти изменения влияют на пути DAV). Также я не хочу беспокоиться о ненужном сетевом трафике. Я действительно хотел бы позволить Angular-UI-Router делать свое дело с интерфейсом ui-view, в котором находится браузер.
  2. Я хотел бы сохранить любые вызовы, которые необходимо сделать доступными для Angular Controller (он управляет аутентификацией, разрешением пути и настройкой контекстных настроек - которые меняются по мере навигации пользователей).
  3. Все (что наиболее важно), сгенерированное решением ITHit, хранится в Singleton ('DavBrowserService') - поэтому, когда я возвращаюсь к представлению файлового браузера, у меня сохраняется все, что хранится в исходном экземпляре, включая:
    • экземпляр объекта ITHit
    • созданный экземпляр ITHit.Loader
    • экземпляр ранее созданного объекта AjaxFileBrowser.Controller (ITHit.oNS.Controller)
    • экземпляр ранее созданного объекта WebDavSession ( ITHit.oNS.WebDavSession)

С учетом вышесказанного - я надеюсь, что смогу просто снова подключить эти экземпляры обратно к теперь возвращенному dom-узлу ('afb-content-div'). Любая помощь высоко ценится!

1 ответ

ОБНОВЛЕНИЕ: приведенный ниже "ответ", хотя и кажется функциональным - на самом деле НЕ был. Однако я обошел эту проблему, захватив экземпляр DOM и сохранив его в памяти, когда пользователь уходит, и повторно прикрепив его после того, как пользователь вернулся в соответствующую область. Таким образом, все ITHit Magic по-прежнему привязано к правильному узлу DOM, и мне не нужно беспокоиться о странности частичного повторного создания экземпляра. Кажется, сейчас довольно солидно.


Я понял!!! Похоже, если я повторно создать экземпляр контроллера, вызвав:

   var controllerInstance = new ITHit.oNS.Controller( originalSettingsObj );

Все переплетается волшебным образом! Я обернул приведенный выше код некоторым определением того, есть ли у дочернего узла HTML DOM "afb-content-div".

После долгих копаний в коде выглядит, что это объект аргумента, возвращаемый в качестве параметра для обратного вызова ITHitLoader.oninit (из экземпляра AjaxFileBrowserLoader).

Спасибо за игру!

Другие вопросы по тегам