Javascript JQuery小部件-通过引用传递选项
我有两个JQuery小部件,一个是“主”小部件,另一个可以看作是子部件。子节点负责收集主节点所需的特定数据。main用于AJAX请求。因此,main有一组发送到服务器的选项。其中一个选项也是子对象中的一个选项 为了更清楚地说明这一点,我有一个主要的小部件,它有几个选项。然后它创建并附加一个子小部件。这个子窗口小部件有一个附加选项,在发送AJAX请求之前,需要在主窗口小部件中填写该选项。为了实现这一点,我将传递给孩子:this.options.someArray 这很好,但是当在子窗口小部件中对该数组进行更改时,它们永远不会返回到主窗口小部件。这意味着AJAX请求在此处发送一个空数组。我怎样才能解决这个问题 [如果这不是标准行为-我可以发布代码示例] 主窗口小部件的代码示例:Javascript JQuery小部件-通过引用传递选项,javascript,jquery,parameter-passing,widget,Javascript,Jquery,Parameter Passing,Widget,我有两个JQuery小部件,一个是“主”小部件,另一个可以看作是子部件。子节点负责收集主节点所需的特定数据。main用于AJAX请求。因此,main有一组发送到服务器的选项。其中一个选项也是子对象中的一个选项 为了更清楚地说明这一点,我有一个主要的小部件,它有几个选项。然后它创建并附加一个子小部件。这个子窗口小部件有一个附加选项,在发送AJAX请求之前,需要在主窗口小部件中填写该选项。为了实现这一点,我将传递给孩子:this.options.someArray 这很好,但是当在子窗口小部件中对该
$.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^^