2016-06-08 67 views
5

我有一個創建tinymce編輯器的自定義元素(Aurelia等同於Web組件)。沒有辦法通過使用選擇器來選擇textarea(因爲在頁面上可以存在任意數量的這些自定義元素)。我需要通過傳遞元素對象來初始化tinymce實例。有這種可能嗎?我無法在任何地方找到此功能...將tinymce編輯器添加到元素對象而不是選擇器

在此先感謝。

+0

如果沒有您正在使用的DOM結構的示例,我們無法開始幫助您。請[參觀],環顧四周,並仔細閱讀[幫助],尤其是[*我如何提出一個好問題?](/ help /如何問) –

+0

*「沒有通過使用選擇器來選擇textarea的方法(因爲在頁面上可以存在任意數量的這些自定義元素)「*這是不合適的。在頁面上具有多個元素實例並不能通過選擇器進行選擇。 –

+0

@ T.J.Crowder不是元素的多個實例,這個自定義元素的多個實例,這意味着自定義元素每次添加到頁面時都會創建一個新的tinymce。它不知道任何超出自身範圍的任何東西(也就是說,它在每次實例化時都不會生成唯一的ID)。 – pQuestions123

回答

18

對不起,我有點晚了。我有這個完全相同的問題。我使用了一個Angular指令,並且我想在$element上初始化TinyMCE。事實證明,你可以使用這個語法:

var element = getYourHTMLElementSomehow(); 

//... 

tinymce.init({ 
    target: element 
}); 

所以你不使用selector可言,而是使用target

我不得不在源代碼中尋找它,因爲它似乎沒有明確記錄在任何地方。

+0

這正是我一直在尋找的。我一直在尋找這樣的代碼塊已經有好幾天了。真的很難相信這個答案在這裏基本沒有被注意到,因爲它幾乎是一個應該包含在文檔中的救星。並被標記爲該問題的真實答案。謝謝@ jens1101,你是我的英雄。 – Tomalla

+0

@Tomalla謝謝,我的榮幸:-) – jens1101

2

由於TinyMCE似乎要求您使用選擇器,並且不會讓您只傳遞一個元素實例(並且開發人員似乎無法根據其論壇響應掌握此用例的效用),但是,最好的辦法是做這樣的事情:

查看

<template> 
    <textarea id.one-time="uniqueId" ...other bindings go here...></textarea> 
</template> 

視圖模型

export class TinyMceCustomElement { 
    constructor() { 
    this.uniqueId = generateUUID(); 
    } 

    attached() { 
    tinymce.init({ 
     selector: `#${this.uniqueId}`, 
     inline: true, 
     menubar: false, 
     toolbar: 'undo redo' 
    }); 
    } 
} 

function generateUUID() { 
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { 
     var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); 
     return v.toString(16); 
    }); 
} 

我的UUID功能來自這裏:Create GUID/UUID in JavaScript?

+0

請注意,我已將'activate'更改爲'attach' b/c我經常將該回調名稱錯誤。 'attach'是你想要的回調。 –

相關問題