我有一個對象,顯示圖標選擇工具欄,如在Skype中。圖標圖像顯示正確,但在生產模式下單擊圖標時,所選圖標不會顯示在文本中。Rails的JavaScript無法在生產模式下工作
我把圖標圖像HTML到控制檯,發現它是正確的,與工具欄中選定的圖像組成。我很困惑。哪裏不對?
應用程序/資產/ Java腳本/ emoticons.js
function EmoticonsToolbar(jquery_element){
var e = jquery_element;
var top = e.offset().top; // store toolbar button initial position
var left = e.offset().left;
var onIconClick_callback; // method to insert icon image html in text
this.hide = function(){
e.hide();
};
// icon click event handler
this.onIconClick = function(eventObject){
e.hide();
var html = $(eventObject.target).parent().html().replace(/\n\s+|\s+\n/g, '');
console.log(html);
// html here: '<img title="ru.emoticons. " src="/assets/emoticons/24x24/02-72977ee3c26c7946176e85da16a13c98.png">'
// that url returnes the image if being typed in address bar
onIconClick_callback(html);
eventObject.stopPropagation();
};
// show icon selection toolbar above the editor button
this.attach_to = function(element, callback){
onIconClick_callback = callback;
var newTop = element.offset().top - top - 10 - e.height();
var newLeft = element.offset().left - left + 10;
e.css({top:newTop, left:newLeft, visibility:'visible'}).show();
};
};
這裏是一個編輯器面板按鈕「插入表情符」,這表明表情工具欄,並處理選中的圖標圖像的HTML。
應用程序/資產/ Java腳本/控制/用戶/地點/ pages.js
function nicEditorEmoticonButton(){
var self;
this.init = function(){
self = this;
};
// Search text input and set focus on it
var setFocusBackToText = function(){
$(self.elm).closest('div.widget').find('div.nicEdit-main').focus();
};
this.mouseClick = function(eventObject) {
var paste_icon_html = function(html){
// create a DOM node from the given html
var div = document.createElement('div');
div.innerHTML = html;
var node = div.childNodes[0];
// get selection if any, insert html as a Node
var range = se.getRng();
range.deleteContents();
range.insertNode(node);
range.setEndAfter(node);
range.setStartAfter(node);
setFocusBackToText();
};
// get nicEdit selected instance - se
var se = this.ne.selectedInstance;
if(se){
emoticonsToolbar.attach_to($(this.button), paste_icon_html);
} else {
// no editor selected, so let select this one
setFocusBackToText();
}
};
};
var emoticonButtonOptions = {
buttons : {
'emoticonToolbar' : {name : __('Emoticon menu bar button'), type : 'nicEditorEmoticonButton'}
}, iconFiles : {'emoticonToolbar' : '/assets/emoticons/ab.gif'}
};
我沒跑rake assets:precompile
更新1:添加aplication.js片段
//= require jquery
//= require jquery-ui
//= require jquery_ujs
//= require_self
//= require_tree ./control
//= require_tree ./popup
//= require_tree ./global
//= require_tree ./lib
//= require hide_on_body_click.js
//= require popup_messages.js
//= require root.js
//= require diaries.js
//= require emoticons.js
//... and plenty of code below
UPDATE 2:A確定問題出在range.insertNode(node)
,因爲range.deleteContent()
確實刪除了選擇,並且setFocusBackToText()
也可以完成它的工作。
應用程序/資產/ Java腳本/ emoticons.js
// get selection if any, insert html as a Node
var range = se.getRng();
range.deleteContents();
range.insertNode(node); // <- doesn't work in production environment
range.setEndAfter(node);
range.setStartAfter(node);
setFocusBackToText();
你可以發佈你的'application.js'文件嗎? – 2013-03-01 17:13:37
你的'control'或'popup'或'global'目錄的位置是什麼?你的意思是包含所有'lib'目錄(它也包含'assets/stylesheets')? – 2013-03-01 17:22:44
'。/ lib'表示'app/assets/javascripts/lib'和'control','popup','global'下的'* .js'文件全部駐留在'app/assets/javascripts' – zuba 2013-03-01 17:33:11