2012-10-02 74 views
0

我使用的是bootstrap datepicker plugin,我需要在插件末尾重載headTemplate對象。從外部JS插件重載函數的正確語法

,看起來像這樣:

var DPGlobal = { 
     modes: [ ... ], 
     isLeapYear: function (year) { 
      [...] 
     }, 
     [...] 

     headTemplate: '<thead>'+ 
         '<tr class="datepicker-btn-group">'+ 
          '<th class="prev"><div class="dp-btn"><i class="timely-icon-arrow-left"/></div></th>'+ 
          '<th colspan="5" class="switch"><div class="dp-btn"></div></th>'+ 
          '<th class="next"><div class="dp-btn"><i class="timely-icon-arrow-right"/></div></th>'+ 
         '</tr>'+ 
        '</thead>', 
     contTemplate: '<tbody><tr><td colspan="7" class="grid-picker"></td></tr></tbody>' 
}; 

所以,不可否認我還在學習的javascript,所以我試圖總結我的周圍,爲什麼下面的代碼不會做我想做的頭。

首先,我需要檢查外部JS文件是否已加載,並且該函數可用,我試圖用jQuery的​​方法進行回調。我得到一些參考誤差與document目標,我承認搞不清楚這個最佳實踐 - 我真的只想說

$('lib/bootstrap-datepicker/js/bootstrap-datepicker.js').load(function() { 
// overwrite/load function 
}); 

而是拋出一堆目標/引用錯誤的,所以不是我嘗試以下方法是因爲jQuery文檔指示我需要傳遞腳本,作爲調用​​函數的第一個參數,而不是目標。這經常使我困惑 - 當我想執行某種程度上全局的函數並且沒有引用任何特定的函數(因此參考document)時,在jQuery中引用事物。

$(document).load('lib/bootstrap-datepicker/js/bootstrap-datepicker.js', function() { 
    origDPGlobal.headTemplate = DPGlobal.headTemplate; 
      DPGlobal.headTemplate = // 'string of HTML for new template'; 
}); 

最後一件事(的彈幕大家對不起),是我不理解如何headTemplate最初是通過結腸聲明:

var DPGlobal = { 
    [...], 
    headTemplate: '// html string', 
    contTemplate: '//html string' 
}; 

我需要重新申報這些作爲原型對象從一個數組,像這樣?

DPGlobal[headTemplate] = '// new html string'; 
DPGlobal[contTemplate] = '// new html string'; 

非常感謝您幫助newb!

回答

1

夫婦的東西:

首先,load用於將文件的內容加載到元件。你不是在尋找getScripthttp://docs.jquery.com/Ajax/jQuery.getScript

二,以下是相同的(只是創建對象):

//one way to build an object 
var DPGlobal = { 
    headTemplate: '// html string', 
    contTemplate: '//html string' 
}; 

//another way to build the same object 
var DPGlobal = {}; 
DPGlobal.headTemplate = 'html string'; 
DPGlobal.contTemplate = 'html string'; 

你看,大括號方法僅設置對象的屬性開始,一樣的,如果你稍後分配給他們。

第三,您關於如何覆蓋模板的猜測很接近。如果您引用方括號中的屬性,則需要使用字符串:

//your way 
DPGlobal['headTemplate'] = '// new html string'; 
DPGlobal['contTemplate'] = '// new html string'; 

//same as 
DPGlobal.headTemplate = '// new html string'; 
DPGlobal.contTemplate = '// new html string';