我编写了一个 ModelAdmin 来管理我网站的 Imageslider。 由 ModelAdmin 管理的一个数据对象是“SliderSettings”。您可以在那里设置 slider 行为。
此处设置的变量应保存到 js 文件中并包含到模板中。 我知道如果您使用 Controller ,您可以使用变量创建内联js。但这不适用于 Dataobjects 并创建内联 js,有没有办法使用我的 Dataobject 执行此操作并创建一个文件而不是内联 js?
这是我的代码 http://sspaste.com/paste/show/525d094569329
提前谢谢您
最佳答案
我强烈建议不要编写文件,而是建议使用Requirements::customScript()
是的,如果你把它放在不被调用的地方(在 DataObject 中),那将毫无用处
因此,让我们将其放在有意义的地方,例如 Page_Controller->init(),
当然,然后我们需要获取 SliderSettings 对象,这可以通过 SliderSettings::get()->First() 来完成,这会为您提供数据库中的第一个 SliderSettings 对象,如果您想获取特定的一个,您可以也可以通过ID获取:SliderSettings::get()->byID(42)
class Page_Controller extends ContentController {
public function init() {
parent::init();
$sliderSettings = SliderSettings::get()->First();
if ($sliderSettings) {
$sliderSettings = Convert::array2json(array(
'SliderEffect' => $sliderSettings->SliderEffect,
'SliderCaptions' => $sliderSettings->SliderCaptions,
'SliderRandom' => $sliderSettings->SliderRandom,
'SliderTicker' => $sliderSettings->SliderTicker,
'SliderPager' => $sliderSettings->SliderPager,
'SliderControls' => $sliderSettings->SliderControls,
'SliderStart' => $sliderSettings->SliderStart,
'SliderAdaptive' => $sliderSettings->SliderAdaptive,
'SliderSpeed' => $sliderSettings->SliderSpeed,
'SliderPause' => $sliderSettings->SliderPause,
));
Requirements::customScript("var sliderSettings = $sliderSettings;");
// Requirements::customScript will put it at the bottom of the HTML, if you need it above the other JS files, you can put it into the header with the following workaround/hack: (if you use this, remove the Requirements::customScript line)
// Requirements::insertHeadTags("<script type='text/javascript'>var sliderSettings = $sliderSettings;</script>");
}
}
}
就是这样,现在您应该在 javascript 中有一个名为 sliderSettings
的变量。
该变量是一个对象,因此您可以像这样访问它:sliderSettings.SliderEffect
或 sliderSettings['SliderEffect']
注意:该变量将位于 JS 文件之后,因此它不能直接在代码中使用,但您可以在 $(document).ready(function() { 内部访问它})
.
关于javascript - 使用数据对象的变量创建一个 js 文件 - Silverstripe 3.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19377806/