Silverstripe清除/删除TreeDropdownField

Joh*_*lia 3 php silverstripe

我使用TreeDropdownField作为SiteTree下拉列表,虽然这是一个可选字段,并希望能够清除/删除此值.我如何使用Silverstripe做到这一点?

    <?php 
class StaticSidebar extends Page {

    static $db = array(
        'ExternalLink' => 'Text',
        'ExternalText' => 'Varchar',
        'ImageLink' => 'Text'
    );

    static $has_one= array(
        "Image" => "Image",
        "InternalLink" => "SiteTree"
    );

    static $allowed_children = array("none");

    public function getCMSFields()
    {
    $fields = parent::getCMSFields();   

    $fields->addFieldToTab("Root.Content.Main", new TextField("ExternalText", "External Text"), "Content");
    $fields->addFieldToTab("Root.Content.Main", new TextField("ExternalLink", "External Link"), "Content");
    $fields->addFieldToTab("Root.Content.Main", new TreeDropdownField("InternalLinkID", "Internal Link", "SiteTree"), "Content");
    $fields->addFieldToTab("Root.Content.Main", new ImageField("Image"), "Content");
    $fields->addFieldToTab("Root.Content.Main", new TextField("ImageLink", "Image Link"), "Content");

        return $fields;
    }       
} 

class StaticSidebar_Controller extends Page_Controller 
{


}
Run Code Online (Sandbox Code Playgroud)

A.S*_*ter 5

$fields->addFieldToTab('Root.TreeDropdown', new TreeDropdownField('PageID','Link','SiteTree'));
$fields->addFieldToTab('Root.TreeDropdown', new CheckboxField('UnselectTreeDropdown','remove Link'));
Run Code Online (Sandbox Code Playgroud)

对我来说简单易用的解决方案是创建一个CB字段并在检查CB时清除treedropdown

function onBeforeWrite(){
    if($this->UnselectTreeDropdown)
        $this->PageID= 0;
    parent::onBeforeWrite();
}
Run Code Online (Sandbox Code Playgroud)

编辑:只需选择当前选中的相同项目即可清除TreeDropdownField.