В этом ответе предполагается, что вы используете 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.
Надеюсь, это поможет.