2012-07-05 29 views
11

Tôi hiện đang chuyển nguồn TinyMCE dưới dạng phụ thuộc và sau đó gọi tinyMCE.init ({}); nhưng nó không khởi tạo TinyMCE. Khi tôi console.log TinyMCE, nó trả về một đối tượng TinyMCE. Mã mẫu bên dưới:Làm cách nào để triển khai TinyMCE với Require.js?

define([ 
'jQuery', 
'Underscore', 
'Backbone', 
'TinyMCE' 
], function($, _, Backbone, tinyMCE) { 

     tinyMCE.init({ 
      mode: "exact", 
      elements: $('textarea'), 
      theme: "advanced", 
      theme_advanced_toolbar_location: 'top', 
      theme_advanced_buttons1: 'bold,italic,underline,bullist,numlist,link,unlink', 
      theme_advanced_buttons2: '', 
      theme_advanced_buttons3: '', 
      theme_advanced_toolbar_align: 'left', 
      plugins: 'paste,inlinepopups', 
      width: '100%', 
      height: textarea.attr('data-height'), 
      oninit: function() { 
       console.log('TargetTD :'); 
       console.log(targetTD); 

      } 
     }); 
    } 
}); 

Trả lời

6

Có cùng vấn đề. Giải pháp của tôi là sử dụng TinyMCE jQuery plugin thay vì TinyMCE trực tiếp. Bằng cách này nó hoạt động tốt.

define(['jquery', 'tiny_mce/jquery.tinymce'], function ($) { 
    $('textarea').tinymce({ 
     script_url : 'js/tiny_mce/tiny_mce.js', 
     theme : 'advanced', 
     theme_advanced_buttons1 : 'fontselect,fontsizeselect,forecolor,bold,italic,underline,strikethrough,justifyleft,justifycenter,justifyright,justifyfull,removeformat,indent,outdent,numlist,bullist,copy,paste,link', 
     theme_advanced_buttons2 : '', 
     theme_advanced_buttons3 : '', 
     theme_advanced_toolbar_location : 'top', 
     theme_advanced_toolbar_align : 'left' 
    }); 
}); 
+3

tôi khuyên tất cả mọi người không sử dụng TinyMCE jquery xây dựng, nó có nhiều nhược điểm và là một nguồn rắc rối, đó là đặc biệt chậm khi nói để xử lý đầu vào bàn phím! – Thariama

31

Bạn có thể sử dụng 'shim' cho requirejs 2.1.0 hoặc cao hơn, xem ví dụ về kịch bản chính dưới đây:

requirejs.config({ 
    baseUrl: "js", 
    paths: { 
     tinyMCE: 'libs/tinymce/tiny_mce' 
    }, 
    shim: { 
     tinyMCE: { 
      exports: 'tinyMCE', 
      init: function() { 
       this.tinyMCE.DOM.events.domLoaded = true; 
       return this.tinyMCE; 
      } 
     } 
    } 
}); 

requirejs([ 
    'tinyMCE' 
], function (tinyMCE) { 
    console.log(tinyMCE); 

    // your code here 
}); 

Sửa: Tôi thêm đoạn iimuhin từ dưới đây trong các ý kiến. Dường như nó không hoạt động mà không có nó; Tôi đã thêm nó bởi vì những người tìm kiếm trong tương lai sẽ đánh giá cao việc tránh sự đau đầu của IE.

+14

Điều này sẽ tải tinyMCE nhưng tinyMCE.init sẽ không tạo ra các trình soạn thảo. Bạn sẽ cần dòng: 'this.tinyMCE.DOM.events.domLoaded = true;' trước 'trả về this.tinyMCE;' (Thử nghiệm trên tinyMCE 4.02b) –

+0

phải thêm một setTimeout để bao bọc việc tạo trình soạn thảo ngoài tất cả điều này. – user1323136

+0

Bất kỳ ý tưởng nào tôi có thể tải về tất cả các plugin tinyMCE cùng một lúc? – Paul

0

Bạn có thể thực hiện tinyMCE như thường lệ trong chế độ xem xương sống. Nhưng bạn phải đợi cho đến khi el của khung nhìn được chèn vào trong dom trước khi khởi tạo tinyMCE. Trong javascript, bây giờ có cách để phát hiện khi phần tử được chèn vào DOM. Nhưng khi một khung nhìn backbone được render (Backbone.View.render()), phần tử sẽ được chèn vào dom sau quá trình của trình duyệt hiện tại. Sử dụng "setTimeout" để khởi tạo phần tử mce nhỏ với 1 mili giây (chỉ đơn giản là thực thi mã trong quá trình của trình duyệt tiếp theo).

var FormTextArea = Backbone.View.extend({ 
    template : _.template('<%=value%>'), 
    tagName: 'textarea', 
    className: "control-group", 
    render: function(){ 
     this.$el.html(this.template(this.model.toJSON())); 
     setTimeout(_.bind(this.initMCE, this), 1); 
     return this; 
    }, 
    initMCE: function(){ 
     tinymce.init({selector: 'textarea'}); 
    } 
}); 

var v = new FormTextArea({ 
    model: new Backbone.Model({value: '<h2>Heading 2</h2><p>A paragraph here</p>'}) 
}); 

$('body').append(v.render().el); 

Đây là một jsfiddle:

http://jsfiddle.net/pCdSy/10/

Các vấn đề liên quan