Как использовать AngularDart, когда мои статические файлы находятся в CDN с другим URL-адресом?

Я использую AngularDart для своего нового приложения. У меня есть компонент, настроенный так:

@NgComponent(
    selector: 'game-timeline',
    templateUrl: '/static/dart/game/web/views/timelineview.html',
    cssUrl: '/static/dart/game/web/views/timelineview.css',
    publishAs: 'ctrl'
)

Но моя проблема в том, что местоположение шаблона и css не обязательно известно во время сборки. Они будут в CDN с уникальным идентификатором развертывания. Что-то типа...

http://cdn.domain.com/static/30294832098/dart/game/web/views/timelineview.html

И это число меняется при каждом развертывании.

Кажется, что путь относится к html-странице, на которой он размещен, а не к CDN, поэтому я не могу просто использовать относительный путь (../blah/blah)

Я могу ввести переменную JS на страницу, сообщающую мне, где находится статический корень, если это поможет.

Основной файл .dart/.js загружается из CDN, но я не могу сделать его относительным.

Есть идеи?

Обновление, вот мое полное решение, адаптированное из отличного ответа pavelgj, который читается в переменной js с именем STATIC_URL на странице.

import 'package:angular/angular.dart';
import 'package:js/js.dart' as js;

class CDNRewriter implements UrlRewriter {
  String staticUrl;

  CDNRewriter() {
    var context = js.context;
    staticUrl = js.context.STATIC_URL;
  }

  String call(String url) {
    if (url.startsWith('/static/')) {
      return _rewriteCdnUrl(url);
    }
    return url;
  } 

  String _rewriteCdnUrl(String url) {
    return url.replaceFirst(new RegExp(r'/static/'), staticUrl);
  }
}

person Marc Hughes    schedule 02.01.2014    source источник


Ответы (1)


Вы можете реализовать собственный UrlRewriter. UrlRewriter вызывается для всех ресурсов, полученных через angular Http, включая шаблоны и css.

class MyUrlRewriter implements UrlRewriter {
  String call(String url) {
    if (url.startsWith('/static/')) {
      return _rewriteCdnUrl(url);
    }
    return url;
  } 
}

myModule.type(UrlRewriter, implementedBy: MyUrlRewriter);
person pavelgj    schedule 02.01.2014
comment
Это именно то решение, которое мне было нужно. Большое спасибо! - person Marc Hughes; 03.01.2014