JQuery Widget - 通过引用传递选项

时间:2011-04-03 18:59:31

标签: javascript jquery parameter-passing widget

我有两个JQuery小部件,一个是'main'小部件,另一个可以被认为是小孩。孩子处理收集主要要求的特定数据。 main用于AJAX请求。因此,main有一组发送到服务器的选项。其中一个选项也是孩子的选择。

为了更清楚,我有一个主要的小部件,有几个选项。然后它创建并附加子窗口小部件。此子窗口小部件有一个附加选项,需要在发送AJAX请求之前填充主窗口小部件。为了使这项工作,我传递给孩子:this.options.someArray

这很好用,但是当在子窗口小部件中对该数组进行更改时,它们永远不会返回到主窗口小部件。这意味着AJAX请求在这个地方发送一个空数组。我该如何解决这个问题?

[如果这不是标准行为 - 我可以发布代码示例]

主Widget的代码示例:

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

创建子窗口小部件的代码:

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

小工具_Init代码:

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

1 个答案:

答案 0 :(得分:0)

如果您希望“_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;
}

(只有在您希望目的地为完整副本,长度和全部时才需要最后一行。)