我正在使用static_url
来引用位于 resources 目录中的静态文件。这适用于文字URL字符串,但它不适用于使用变量构建的复合URL:
static_url(foo + '/' + bar)
SproutCore的预处理器忽略了这一点。
那么有没有办法引用带有复合URL的静态文件?或者,由于我正在处理一组有限的URL,在引用它之前是否必须引入每个复合URL?
答案 0 :(得分:1)
此答案假定您使用的是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来在运行时更改图像。
希望这有帮助。