Ссылки на статические файлы с составными URL-адресами в SproutCore - PullRequest
1 голос
/ 16 ноября 2011

Я использую static_url для ссылки на статические файлы, которые находятся в каталоге resources . Это хорошо работает, когда для буквенных строк URL, но не работает для составных URL, которые были созданы с использованием переменных:

static_url(foo + '/' + bar)

Это просто игнорируется препроцессором SproutCore.

Так есть ли способ сослаться на статический файл с составным URL? Или, поскольку я работаю с ограниченным набором URL-адресов, нужно ли вводить каждый составной URL-адрес, прежде чем я смогу на него ссылаться?

1 Ответ

1 голос
/ 22 ноября 2011

В этом ответе предполагается, что вы используете SC1.

Я считаю, что static_url() обрабатывается инструментами сборки (sc-build и sc-server) во время компиляции, а не инфраструктурой во время выполнения.

Код для инструментов сборки можно найти по адресу https://github.com/sproutcore/abbot. Я считаю, что base.rb replace_static_url() - это место, где выполняется работа.

Итак, следующий код:

imageView: SC.ImageView.design({
  layout: { top: 0, left: 0, width: 200, height: 18 },
  value: static_url('picture.png')
})    

компилируется в следующее перед доставкой в ​​браузер:

imageView: SC.ImageView.design({
  layout: { top: 0, left: 0, width: 200, height: 18 },
  value: '/static/vvv/en/current/source/resources/picture.png?1320555999'
})  

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

// In your view
imageView: SC.ImageView.design({
  layout: { top: 0, left: 0, width: 200, height: 18 },
  valueBinding: 'Vvv.controller.imageValue'
}) 

// In another file, define the controller
Vvv.controller = SC.Object.create({
    foo: '/static/vvv/en/current/source/resources',
    bar: 'bug.png',

    imageValue: function() {
       return this.get('foo') + '/' + this.get('bar');
    }.property().cacheable()
});

Кроме того, если у вас естьКонечный набор ресурсов, вы можете попробовать:

Vvv.controller = SC.Object.create({
    foo: static_url('foo.png'),
    bar: static_url('bar.png'),
    isFoo: false,

    imageValue: function() {
       if (this.get('isFoo')) {
           return this.get('foo');
       } else {
           return this.get('bar');
       }
    }.property('isFoo').cacheable()
});

Вы можете изменить изображение во время выполнения, установив isFoo в true или false.

Надеюсь, это поможет.

...