2012-04-06 21 views
0

我正在寫一個簡單的jQuery插件,它將與JSON對象/數組交互。我想讓這個對象數組具有足夠的靈活性,以便人們可以將它們自己傳遞給插件函數。我希望用戶能夠通知插件如何獲取JSON對象中的兩個不同值。舉例來說,假設這是JSON -如何傳遞嵌套對象屬性作爲選項,而不傳遞迴調函數?

[ 
    { 
     name: "Baseball Opening Day", 
     format: "jpg", 
     urls: { 
     small: "http://myurl.com/images/small/baseball.jpg", 
     big: "http://myurl.com/images/big/baseball.jpg" 
     } 
    }, 

    // etc. 
] 

如果插件「知道」將通過圖像對象的數組,但是這些圖像對象可能在許多方面被格式化,怎麼能我們通過一個選項來告訴它在哪裏可以找到各種事物?例如,如果我想顯示標題,我會要求提供標題值。這一個是相當容易:

$("gallery").myPlugin({ 
    references: { 
    caption: "name" 
    } 
}); 

插件裏面,我們可以得到這樣的價值,一旦我們通過收集的圖像對象循環:

// Assuming the value passed in is called "options"... 
var caption = image[options.references.caption]; 

將被解釋爲圖像[ 「名稱」]這是相同的image.name和正常工作。

但你如何告訴插件如何去image.urls.small?你可以這樣做:

$("gallery").myPlugin({ 
    references: { 
    caption: "name", 
    urlSmall: "urls.small" 
    } 
}); 

,因爲它會被解釋成圖像[「urls.small」],並返回undefined

有沒有辦法通過這個?或者,在這一點上我必須使用像這樣的回調函數:

$("gallery").myPlugin({ 
    references: { 
    caption: "name", 
    urlSmall: function() { 
     return this.urls.small; 
    } 
    } 
}); 

// Call it like this inside the plugin image loop 
var urlSmall = options.references.urlSmall.call(image); 

我知道這是一種選擇,但我不知道是否有避免強迫用戶如果寫一個回調函數的方式他們可以傳遞一個對嵌套對象屬性的引用,不知何故?

謝謝!

回答

1

您只需要一個可以分割這些屬性名稱的方法。 http://jsfiddle.net/mendesjuan/CUMgL/

裏面你的插件,你可以做

// Assuming the value passed in is called "options"... 
var caption = getProp(image, options.references.caption); 

理想getProp還將與getProp('a[b]')工作,但是這是一個有點困難,所以你可以,如果你想實現它。 Ext-JS有一個叫做Ext.data.reader.JsonReader的東西,它的確如此,你可以用它作爲靈感http://docs.sencha.com/ext-js/4-0/source/Json2.html#Ext-data-reader-Json尋找方法createAccessor

+0

就是這樣。尼斯效用函數,並感謝jsfiddle證明。大的幫助。 – rhodesjason 2012-04-06 16:59:41

相關問題