2013-03-01 42 views
0

我有一個對象,顯示圖標選擇工具欄,如在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(); 
+1

你可以發佈你的'application.js'文件嗎? – 2013-03-01 17:13:37

+0

你的'control'或'popup'或'global'目錄的位置是什麼?你的意思是包含所有'lib'目錄(它也包含'assets/stylesheets')? – 2013-03-01 17:22:44

+0

'。/ lib'表示'app/assets/javascripts/lib'和'control','popup','global'下的'* .js'文件全部駐留在'app/assets/javascripts' – zuba 2013-03-01 17:33:11

回答

0

我你的情況我會建議使用index.js文件。在Rails guide(詳見2.1.2)中有詳細描述。

在你的目錄app/assets/javascripts/control/你應該創建一個名爲index.js用(簡體)內容的新清單文件:

//= require_tree . 

然後在您的application.js

//= require control 

(注意索引目錄的名稱.js文件應與application.js中所需的lib匹配)。

這樣您就可以嵌套您的資產庫並減少主清單文件中的行。

+0

嗯,好吧,但是這與所有emoticons.js腳本行相關的事實是如何,但一個表演行。請參閱UPDATE 2 – zuba 2013-03-01 18:42:37

相關問題