我正在为一个SilverStripe项目尝试一些不同的东西:我需要找到一种方法来获取CMS中的字段,并将它们放入JavaScript变量中,以便在JavaScript文件中使用。
首先,我在Page.php中有一个标题CMS字段。
private static $db = array(
'Header' => 'HTMLText'
);
public function getCMSFields() {
$fields = parent::getCMSFields();
$fields->addFieldToTab('Root.Main', new HTMLEditorField('Header', 'Header'));
return $fields;
}我希望将JavaScript文件中的字段引用为变量:
{
id: 'Text-Intro',
type: 'text',
rect: ['251px', '250px','641px','71px','auto', 'auto'],
text: [Header variable needs to go here],
align: "left",
font: ['Arial, Helvetica, sans-serif', 25, "rgba(0,0,0,1.00)", "500", "none", "normal"]
},我尝试使用Requirements::javascriptTemplate()函数,但是在detail-page_edge.js文件中无法识别该变量:
public function init() {
parent::init();
Requirements::javascriptTemplate('/themes/simple/javascript/detail-page_edge.js', array(
'Header' => $this->Header
));
}一定是遗漏了什么,还是这已经过时了?我以前从未在SilverStripe上尝试过这个。不过,考虑到这个项目是如何设置的,我没有太多选择。
发布于 2016-03-07 20:31:52
您可以使用SilverStripe模板语法进行简单的变量替换。因此,您的JS文件应该是:
// ... plain JS code
text: '$Header',
// ... more JS code请注意,您不能使用更复杂的模板语法,例如<% loop … %>或<% if … %>,因为javascriptTemplate只会执行变量替换。
如果您需要完整的模板特性,您可以呈现一个.ss模板文件来字符串并使用Requirements::customScript输出它。我觉得你不应该这么做,尽管…甚至通过javascriptTemplate处理JS文件似乎也是关闭的。我宁愿在您的常规标记中使用HTML数据属性(例如。( .ss模板),并以获取所需属性并构建标记的方式编写JavaScript。
另外:确保文件的路径正确。而不是写绝对路径:
'/themes/simple/javascript/detail-page_edge.js'我建议你使用以下方法:
$this->ThemeDir() . '/javascript/detail-page_edge.js'https://stackoverflow.com/questions/35848089
复制相似问题