jsonに関数を含むようにして、プラグインのオプションがjson文字列にあった関数の戻り値を取得するようにします。json文字列の関数の値を取得する
(function($) {
function defined(obj){return typeof(obj)!=='undefined';}
function evaluate(ele, obj) {
if(typeof obj === 'function') {
//alert('is function');
obj = obj(ele);
}else{
try{
//alert('thinking it may be a function still');
obj = eval("("+obj+"("+ele+"));");
//obj = (obj)(ele);
}catch(err){
//Handle errors here
//alert('not function');
}
}
return obj;
}
function debug(message) {
console.debug(message);
}
$.set = function(options){
var settings = $.extend({}, {}, options);
if(defined(settings.actions)){
$.each(settings.actions, function(index, value) {
$(value.element).do_action(defined(value.options)?value.options:null);
});
}
}
$.fn.do_action = function(options) {
// Add event handler to all matching elements
return this.each(function() {
var ele = $(this);
var settings = $.extend({}, $.fn.do_action.defaults, options);
var label= evaluate(ele, settings.label);
var message = "label:'" + label + "'";
debug('Tracking ' + action + ' ' + message);
});
};
$.fn.do_action.defaults = {
label : function(ele) { return ele.attr('href'); }
};
}(jQuery));
であり、制御が
$.getJSON('default.txt' , function(data){
$.set({
actions:data // this si where we pull in the options
});
});
Iある
default.txt
[
{
"element":"a[href$='.jpg']",
"options":{
"label":"test"
}
},{
"element":"a#hover",
"options":{
"label":(function(ele){ return 'test'; })()
}
}
]
とプラグイン:など
が設定されています私が警報を入れたらうまくいくようだ匿名関数、
"label":(function(ele){ return 'test'; })()
から
"label":(function(ele){ alert('test') })()
にとてもが、その後、私は私が唯一のメッセージ
Tracking label:'(function(ele){ return 'test'; })
を取得するとして、それがコンソールに右印刷するように見えることはできません
[編集] "あなたはjsonにコードを入れてはいけません"ということをやめてください。あなたがGoogleに就職してトップレベルのプログラマーがスーパー・ドルを支払っているのであれば、その理由を聞くことになりますが、申し訳ありませんが、それが良いのであれば、私のために働くでしょう。他に何が言えばいいのかわからないので、私はあなたがそれを避けなければならない理由をすでに理解しています。あなたがちょうどできない時、私がGoogleが同じことをすると思われる理由があります。
JSONはコードすべきではありません - ちょうどデータ。 –
google;) –
ちょうどヘッドアップ - "lable"として "label"のスペルが間違っている場所をいくつか持っています – matt