Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQuery小部件-通过引用传递选项_Javascript_Jquery_Parameter Passing_Widget - Fatal编程技术网

Javascript JQuery小部件-通过引用传递选项

Javascript JQuery小部件-通过引用传递选项,javascript,jquery,parameter-passing,widget,Javascript,Jquery,Parameter Passing,Widget,我有两个JQuery小部件,一个是“主”小部件,另一个可以看作是子部件。子节点负责收集主节点所需的特定数据。main用于AJAX请求。因此,main有一组发送到服务器的选项。其中一个选项也是子对象中的一个选项 为了更清楚地说明这一点,我有一个主要的小部件,它有几个选项。然后它创建并附加一个子小部件。这个子窗口小部件有一个附加选项,在发送AJAX请求之前,需要在主窗口小部件中填写该选项。为了实现这一点,我将传递给孩子:this.options.someArray 这很好,但是当在子窗口小部件中对该

我有两个JQuery小部件,一个是“主”小部件,另一个可以看作是子部件。子节点负责收集主节点所需的特定数据。main用于AJAX请求。因此,main有一组发送到服务器的选项。其中一个选项也是子对象中的一个选项

为了更清楚地说明这一点,我有一个主要的小部件,它有几个选项。然后它创建并附加一个子小部件。这个子窗口小部件有一个附加选项,在发送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”代码重新设置“tags”内容,则不要将其设置为引用全新的数组:

_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;
}
函数数组复制(src、dest){
对于(var i=0;i
(只有当您希望目标是完整副本、长度和全部时,最后一行才是必需的。)

如果您希望“_init”代码重新设置“tags”内容,则不要将其设置为引用全新的数组:

_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;
}
函数数组复制(src、dest){
对于(var i=0;i

(只有当您希望目标是完整副本、长度和所有内容时,最后一行才是必需的。)

您应该发布代码,因为对数组的共享引用就是对数组的共享引用:-)如果引用似乎没有被共享,那么代码中的某项操作就是制作数组的副本;JavaScript本身不会这样做。包含应该是相关位的内容。您应该发布代码,因为对数组的共享引用就是对数组的共享引用:-)如果引用似乎没有被共享,那么代码中的某些内容正在做一些事情,比如复制数组;JavaScript本身不会这样做。包含了应该包含的相关位。谢谢,我是JavaScript新手,没有意识到这样做会创建一个新数组并更改引用。关于数组复制函数,有一个本机技巧:var arr_copy=arr.slice(0)@约翰纳:哦,好吧————哦,不,等一下;这会生成一个数组的副本,这正是我们不想在这里做的。我们想从源数组复制到现有的目标数组中。啊,是的……var ar2=ar2.concat(ar.slice(0));你是对的,没有简单的本机函数:-)-并且在操作之前必须清空目标数组…olala^^谢谢,我对javascript不熟悉,没有意识到这样做会创建一个新数组并更改引用。关于数组复制函数,有一个本机技巧:var arr_copy=arr.slice(0)@约翰纳:哦,好吧————哦,不,等一下;这会生成一个数组的副本,这正是我们不想在这里做的。我们想从源数组复制到现有的目标数组中。啊,是的……var ar2=ar2.concat(ar.slice(0));您是对的,没有简单的本机函数:-)---并且必须在操作之前清空目标数组…olala^^