2015-12-21 4 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, и поэтому $.extend, который используется в Plugin.prototype.init, не использует значение по умолчанию.

Вы могли бы решить эту проблему, изменив эту строку в 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: Рад, что проблема решена.Вы все еще можете заметить, что массив 'actions' будет перезаписан и не добавлен, если вы не вручную вмешались, чтобы изменить это. –

0

Я понял, что объект настроек - это то, что мне нужно было восстановить, вместо объекта по умолчанию, который я извлекал в своем коде. Я не предоставил достаточно информации для успешного ответа, чтобы получить такие извинения. Но проблема теперь решена.

Приветствия

Смежные вопросы