javascript - 使用数据对象的变量创建一个 js 文件 - Silverstripe 3.1

标签 javascript silverstripe

我编写了一个 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.SliderEffectsliderSettings['SliderEffect']
注意:该变量将位于 JS 文件之后,因此它不能直接在代码中使用,但您可以在 $(document).ready(function() { 内部访问它}).

关于javascript - 使用数据对象的变量创建一个 js 文件 - Silverstripe 3.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19377806/

相关文章:

silverstripe - 保存记录前获取下一个ID

silverstripe - 如何在循环中获得倒数第二个项目

javascript - 什么是自执行匿名函数或这段代码在做什么?

javascript - 通过 JavaScript 连接到计算机音频源

php - 如何在 Silverstripe 中使用第二个数据库

javascript - 如何在 Silverstripe CMS 中使用 javascript?

silverstripe - 前端的 CMS 链接未转换即 href=[sitetree_link_id=xx]

javascript - 在 jQuery 中,如何为动态内容添加动画效果(如 slideDown)?

javascript - Laravel 无法正常工作

javascript - 如何使用加密创建随机盐哈希