如何在Silverstripe CMS中使用javascript?

Hal*_*syz 3 javascript silverstripe

我正在使用SilverStripe 3.0 CMS,我需要在CMS中加入Google Map.

我正在执行这些步骤,除了它有点旧,官方文档在当前版本的SilverStripe中使用相同的方法(至少它似乎是当前版本的文档).

问题出在这部分代码中:

Behaviour.register({ 
    "#Form_EditForm" : { 
        initialize : function() { 
            this.observeMethod("PageLoaded", this.adminPageHandler); 
            this.adminPageHandler(); 
        }, 
        adminPageHandler : function() { 
            initialize(); 
        } 
    } 
}); 
Run Code Online (Sandbox Code Playgroud)

首先,没有定义行为.我需要手动包含框架内的behaviour.js文件.但现在,我得到一个类型错误:

this.observeMethod is not a function
Run Code Online (Sandbox Code Playgroud)

在SilverStripe CMS中打开页面编辑器时,有人可以给我一些提示,以便调用javascript函数吗?

sch*_*max 6

您提到的'Behaviour.register'调用肯定已弃用,核心代码中不再提供,因此文档需要在此处进行更新.

不幸的是,我找不到一个记录的方法来取代这种行为,但是现在以下内容应该对你有用,基于你在第一手提到的论坛帖子中的方法:

找到这里添加的'initGoogleMaps.js'脚本:

function getCMSFields() { 
Requirements::javascript('mysite/javascript/initGoogleMaps.js');  
...
Run Code Online (Sandbox Code Playgroud)

在这个脚本中,删除Behaviour.register...块,并将该initialize函数移到document.ready 之外(或者只是删除document.ready部分),因此initialize全局可用(您可以考虑重命名).

然后,在里面添加以下内容getCMSFields:

$fields->addFieldToTab('Root.Content', new LiteralField('js', '<script>initialize();</script>'));
Run Code Online (Sandbox Code Playgroud)

这将确保initialize每次在cms内呈现页面的"编辑视图"时调用该函数.

心连心