2016-05-12 130 views
1

在silverstripe當內TextareaField添加選項卡我有一個需要內TextareaField使用標籤 - 目前,將導航從現場消失,但我想它在那裏寫一個標籤來代替。在silverstripe CMS按下

更新基於下面我把這個添加代碼註釋...

_config.yml

TextareaField: 
    extensions: 
    - TextareaFieldExtension 

TextareaFieldExtension.php

class TextareaFieldExtension extends DataExtension { 

    public function onBeforeRender() { 

     Requirements::customScript(<<<JS 
      $(document).delegate('#textbox', 'keydown', function(e) { 
       var keyCode = e.keyCode || e.which; 

       if (keyCode == 9) { 
       e.preventDefault(); 
       var start = $(this).get(0).selectionStart; 
       var end = $(this).get(0).selectionEnd; 

       // set textarea value to: text before caret + tab + text after caret 
       $(this).val($(this).val().substring(0, start) + "\t" + $(this).val().substring(end)); 

       // put caret at right position again 
       $(this).get(0).selectionStart = 
       $(this).get(0).selectionEnd = start + 1; 
       } 
      }); 
JS 
     ); 
    } 
} 

我知道onBeforeRender被稱爲因爲我使用了一個死亡('hello world')來檢查。但是,在任何TextareaField中使用Tab都沒有改變。我哪裏錯了?

+0

http://stackoverflow.com/questions/6637341/use-tab-to-indent-in-textarea –

+0

@GavinBruce所以我已經將該代碼放入銀色條紋包裝,但沒有影響 – Barry

回答

2

我們可以像這樣與糾纏的實現這一點:

的mysite/JavaScript的/ cms.js

(function($) { 
    jQuery.entwine('ss', function($) { 

     $('.field.textarea textarea').entwine({ 
      onkeydown: function(e) { 
       var keyCode = e.keyCode || e.which; 

       if (keyCode == 9) { 
        e.preventDefault(); 
        var start = $(this).get(0).selectionStart; 
        var end = $(this).get(0).selectionEnd; 

        // set textarea value to: text before caret + tab + text after caret 
        $(this).val($(this).val().substring(0, start) + "\t" + $(this).val().substring(end)); 

        // put caret at right position again 
        $(this).get(0).selectionStart = $(this).get(0).selectionEnd = start + 1; 
       } 
      } 
     }); 
    }); 
})(jQuery); 

我們通過把這個在我們的配置陽明文件加載所有CMS這個JavaScript文件:

的mysite/_config/config.yml

LeftAndMain: 
    extra_requirements_javascript: 
    - 'mysite/javascript/cms.js' 
+0

我把它放在ModelAdmin初始化,因爲它不工作(即js代碼沒有包含在頁面源代碼中),並且我確實開發了flush ...可能是我的錯誤...但我想我會評論 – Barry