2016-09-21 8 views
1

EmberのアプリケーションでCKEditorを使用したいと思います。 私はEmberと100%n00bですが、私はそこに着いています。EmberのCkeditorの使用

私はこれを理解するために私darndestを試してみましたが、私はどこにも得ていないました:(

私はember-ckeditorを使用しようとしました。これは、編集者は、このような設定のように、物事のためにnet::ERR_NAME_NOT_RESOLVEDエラーの束を投げてしまいました.jsファイルと、それは資産フォルダに見つけることが期待される他、「資産」。

私はember-cli-ckeditorを試してみました。上と同じ正確な問題が。

これら二つのアドオンはかなりラメのドキュメントを持っている。例えば、私は見当がつかないどのようにカスタムの設定ファイル、CSSなどを提供するか、またはもし私がアリはCkFinderを使用する?

は、私は最終的に手動 vendorフォルダにCKEditorバージョンのv4.5.6を含めるしてみました.... 2個の以上のアドオンもサーバをロードするとき、いくつかの警告を減価償却投げるが、私はdisgress。 次に、に次のように記述しています: app.import('vendor/ckeditor/ckeditor.js'); 私はこれを正しく実行しているかどうかわかりません。もしそうなら、どうすればコントローラまたはコンポーネント内のエディタプラグインを使用するのですか?

CKEDITOR.replace("content"); Emberの外でいつもですか?

私を学校にしてください! (独自のコンポーネントを作成する)アドオンなしでCKEditorバージョンを使用するには

答えて

3

  1. 亭使用CKEditorバージョンをインストールします。

    bower install ckeditor --save 
    
  2. インストールbroccoli-funnelを、あなたはCKEditorバージョンの資産のためにそれが必要になります。あなたの燃えさし-CLI-build.jsで

    npm install broccoli-funnel --save-dev 
    
  3. を一番上にファイルリクエストのファンネルの

    var Funnel = require('broccoli-funnel'); 
    

    アプリのオプションex指紋からcludeのCKEditorバージョンの資産:

    var app = new EmberApp(defaults, { 
        fingerprint: { 
        exclude: ['assets/ckeditor/'] 
        } 
    }); 
    

    インポートCKEditorバージョンのJSと資産:

    app.import('bower_components/ckeditor/ckeditor.js'); 
    
    var ckeditorAssets = new Funnel('bower_components/ckeditor', { 
        srcDir: '/', 
        destDir: '/assets/ckeditor' 
    }); 
    
    /** 
    * If you need to use custom skin, put it into 
    * vendor/ckeditor/skins/<skin_name> 
    * Also, custom plugins may be added in this way 
    * (look ckeditor's info for details) 
    * If you don't need custom skins, you may remove 
    * ckeditorCustoms 
    */ 
    var ckeditorCustoms = new Funnel('vendor/ckeditor', { 
        srcDir: '/', 
        destDir: '/assets/ckeditor' 
    }); 
    
    return app.toTree([ckeditorAssets, ckeditorCustoms]); 
    
  4. あなたのアプリは、Webサイトのルートにない場合は、インデックスの本体部に、このスクリプトを配置する必要があるかもしれません。html、他のスクリプトの前:

    <script type="text/javascript"> 
        window.CKEDITOR_BASEPATH = '/path-to/assets/ckeditor/'; 
    </script> 
    
  5. コンポーネントを作成します。 警告:これは放棄されたペットプロジェクトのコードです。依存関係がないため、別のhtmlレイアウト用に作成されたため、 "そのまま"あなたのために機能しないことを99%確信しています。しかし、私はそれがとにかく助けるかもしれないと思います。

    npm install --save-dev ember-browserify 
    npm install --save-dev sanitize-html 
    

    コンポーネントのコード:

    /* globals CKEDITOR */ 
    import Ember from 'ember'; 
    import layout from '../templates/components/md-ckeditor'; //component's name! 
    import SanitizeHTML from 'npm:sanitize-html'; 
    
    export default Ember.Component.extend({ 
        layout: layout, 
        classNames: ['input-field'], 
    
        _editor: null, 
    
        bindAttributes: ['disabled', 'readonly', 'autofocus'], 
        validate: false, 
    
        errorsPath: 'errors', 
    
        init() { 
        this._super(...arguments); 
        const propertyPath = this.get('valueBinding._label'); 
        if (Ember.isPresent(propertyPath)) { 
         Ember.Binding.from(`targetObject.${this.get('errorsPath')}.${propertyPath}`) 
         .to('errors') 
         .connect(this); 
        } 
        }, 
    
        didInsertElement() { 
        var i18n = this.get('i18n'); 
    
        if (Ember.isPresent(this.get('icon'))) { 
         this.$('> span').css('padding-left', '3rem'); 
        } 
    
        this._setupLabel(); 
    
        this._editor = CKEDITOR.inline(this.element.querySelector('.ckeditor'), { 
         skin: 'minimalist', 
         toolbar: [ 
         ['Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord'], 
         ['Undo', 'Redo'], 
         ['Bold', 'Italic', 'Strike'], 
         ['Link', 'Unlink'], 
         ['NumberedList', 'BulletedList', 'Blockquote'], 
         ['Source'] 
         ], 
         linkShowAdvancedTab: false, 
         linkShowTargetTab: false, 
         language: i18n.get('locale'), 
         removePlugins: 'elementspath' 
        }); 
        this._editor.on('instanceReady', (e) => { 
         this._updateValidClass(); 
        }); 
        this._editor.on('change', (e) => { 
         this.set('value', e.editor.getData()); 
        }); 
        this._editor.on('focus', (e) => { 
         var label = this.$('> label, > i'); 
         label.addClass('active'); 
        }); 
        this._editor.on('blur', (e) => { 
         var label = this.$('> label, > i'); 
         var text = SanitizeHTML(e.editor.getData(), { 
         allowedTags: [] 
         }).trim(); 
         if (text !== '') { 
         label.addClass('active'); 
         } else { 
         label.removeClass('active'); 
         } 
        }); 
        }, 
    
        willDestroyElement() 
        { 
        this._editor.destroy(); 
        this._editor = null; 
        },   
    
        id: Ember.computed('elementId', function() { 
        return `${this.get('elementId')}-input`; 
        }), 
    
        validClass: Ember.computed('value', 'errors', function() { 
        var errors = this.get('errors'); 
        if (errors && errors.get && errors.get('firstObject')) { 
         return 'invalid'; 
        } else if (!!this.get('value')) { 
         return 'valid'; 
        } else { 
         return ''; 
        } 
        }), 
    
        validClassChanged: Ember.observer('validClass', function() { 
        Ember.run.once(this, '_updateValidClass'); 
        }), 
    
        _updateValidClass() { 
        if (this._editor && this._editor.container &&   this._editor.container.$) { 
         Ember.$(this._editor.container.$).removeClass('invalid   valid').addClass(this.get('validClass')); 
        } 
        }, 
    
        _setupLabel() { 
        const label = this.$('> label, > i'); 
        if (Ember.isPresent(this.get('value'))) { 
         label.addClass('active'); 
        } 
        } 
    }); 
    

    テンプレート:

    {{textarea 
    id=id 
    value=value 
    name=name 
    required=required 
    readonly=readonly 
    disabled=disabled 
    maxlength=maxlength 
    class="materialize-textarea ckeditor" 
    classNameBindings="validate:validate: validClass" 
    }} 
    <label for="{{id}}">{{label}}</label> 
    <small class="red-text"> 
        {{#if errors}} {{errors.firstObject}} {{else}} &nbsp; {{/if}} 
    </small> 
    
あなたはそれを試してみて、コピー&ペーストしたい場合は、ここでの依存関係があります
関連する問題