JQuery Widget - передать параметры по ссылке - PullRequest
2 голосов
/ 03 апреля 2011

У меня есть два виджета JQuery, один является своего рода «основным» виджетом, другой можно считать дочерним. Ребенок управляет сбором определенных данных, которые требуются основным. Основное используется с AJAX-запросами. Итак, у основного есть набор опций, которые отправляются на сервер. Одна из этих опций также является опцией у ребенка.

Чтобы сделать это более понятным, у меня есть основной виджет, который имеет несколько вариантов. Затем он создает и добавляет дочерний виджет. Этот дочерний виджет имеет дополнительную опцию, которую необходимо заполнить в главном виджете перед отправкой запроса AJAX. Для того, чтобы сделать эту работу, я передаю ребенку: this.options.someArray

Это прекрасно работает, однако, когда в дочерний виджет вносятся изменения в этот массив, они никогда не возвращаются к основному виджету. Это означает, что запрос AJAX отправляет пустой массив в это место. Как я могу это исправить?

[Если это не стандартное поведение - я могу опубликовать пример кода]

Пример кода для основного виджета:

$.widget('be.deckEditor', {
  options: {
    deck: { name: "", id: 0, cards: [],  tags: [] }
  },

Код для создания дочернего виджета:

tagEditBox = $('<div>');
tagEditBox.tagEditor({tags:this.options.deck.tags});

Виджет _Инитетный код:

_init: function () {
  this.options.tags = ['ace','two'];
},

1 Ответ

0 голосов
/ 03 апреля 2011

Если вы хотите, чтобы этот код «_init» переустанавливал «теги» содержимое , то не устанавливайте его для обращения к новому массиву:

_init: function () {
  this.options.tags[0] = 'ace';
  this.options.tags[1] = 'two';
  this.options.tags.length = 2;
},

Вы можете написать функцию, чтобы целевой массив содержал то, что содержит другой массив;Я не думаю, что есть один встроенный, но я не могу вспомнить, чтобы когда-либо хотел найти такую ​​вещь:

function arrayCopy(src, dest) {
  for (var i = 0; i < src.length; ++i) dest[i] = src[i];
  dest.length = src.length;
}

(Последняя строка необходима, только если вы хотите, чтобы место назначения было полной копией,длина и все.)

...