2015-12-21 50 views
0

我有一個自定義的jQuery插件,我正在處理一些與JSON有關的問題。爲什麼函數沒有收到輸入的JSON數據?

我使用jQuery plugin boilerplate創建此,在頂部像我設置默認屬性,以便:

// Create the defaults once 
var pluginName = "customHighlight", 
     defaults = { 
      actions: [{"test_action":"Test action"}], 
      position: "left" 
}; 

的問題是,當我嘗試設置的插件一樣開始我自己的屬性所以:

$('div,p').customHighlight({ 
    actions: [{"1_action":"1 action"}] 
}); 

我沒有得到任何通過。我是否犯了一個學校男孩的錯誤,我沒有抓到這裏?

+1

你需要的地方包括:結合什麼已經通過與默認,也許如何你確定你已經通過了代碼。 –

+0

那裏沒有JSON。 'actions'是一個數組。 – Quentin

回答

0

你不完全清楚你的意思是「什麼都沒有通過」。您在完成樣板文件時犯了錯誤,而且您沒有顯示任何相關代碼,因此我們無法爲您指出這一點,但是您的設置中存在一個通用設計缺陷。

如果你使用正確的樣板,你的插件的settings屬性將是這樣的:

{ 
    actions: [{"1_action":"1 action"}], 
    position: "left" 
} 

我假設你期待actions是兩個對象的數組。此結果是因爲您指定的值爲actions,因此在Plugin.prototype.init中使用的$.extend不使用默認值。

您可以通過在init改變這一行解決這個問題:

this.settings = $.extend({}, defaults, options); 

要這樣:

this.settings = $.extend(true, {}, defaults, options); 
         //^"deep" param 

設置deep表示$.extend應該遞歸應用。但是,這並不對數組工作,所以你還需要確保actions是一個對象:

var pluginName = "customHighlight", 
     defaults = { 
      actions: {"test_action":"Test action"}, 
      position: "left" 
}; 

現在,調用customHighlight這樣的:

$('div,p').customHighlight({ 
    actions: {"1_action":"1 action"} 
}); 

將導致settings對象,看起來像這樣:

{ 
    actions: { 
     "test_action": "Test action" 
     "1_action": "1 action" 
    }, 
    position: "left" 
} 

Fiddle

+0

感謝您花時間回答這個問題。幸運的是,我意識到我的錯誤只是不知道jQuery樣板文件真正起作用!我在下面輸入了我的答案/思考過程。 – Tapha

+0

@Tapha:很高興你的問題解決了。你可能還想指出'action'數組將被覆蓋並且不會附加到,除非你手動干預來改變它。 –

0

我意識到設置對象是我需要檢索的,而不是我在代碼中檢索的默認對象。在這裏我沒有提供足夠的信息來獲得成功的答案,所以我們很抱歉。但問題現在已經解決。

乾杯

相關問題