Javascript 通过引用传递/存储数组?

Javascript 通过引用传递/存储数组?,javascript,mootools,Javascript,Mootools,我对javascript相当陌生。我下载了一些代码来制作搜索框的自动补全器,但它并没有像我预期的那样工作 这是我下载的代码: Autocompleter.Local = new Class({ Extends: Autocompleter, initialize: function (element, tokens, options) { this.parent(element, options); console.log(tokens); /

我对javascript相当陌生。我下载了一些代码来制作搜索框的自动补全器,但它并没有像我预期的那样工作

这是我下载的代码:

Autocompleter.Local = new Class({

    Extends: Autocompleter,

    initialize: function (element, tokens, options) {
        this.parent(element, options);
        console.log(tokens); // I added this
        this.tokens = tokens;
    },

    query: function () {
        console.log(this.tokens); // and this
        this.update(this.filter());
    }

});
为了使用此代码,我执行以下操作:

var Activities = ['aa', 'bb', 'cc', 'abcd'];

function InitializePage() {

    new Autocompleter.Local('txtSearch', Activities, {
        'minLength': 1, // We wait for at least one character
        'overflow': false, // Overflow for more entries
        'selectMode': 'type-ahead'
    });
}

window.addEvent('domready', function () {
   InitializePage();
});
initialize函数的
tokens
参数是一个数组,它包含了自动完成程序可能建议的所有可能的内容。
filter()
函数过滤这些内容,以便只向用户显示相关内容。我想做的是在不同的时间更改
令牌
数组,以便向用户建议不同的内容

我试着这样做:

new Request.JSON({ method: 'get', url: 'handler/GetActivities.ashx', autoCancel: true, urlEncoded: false, secure: false,
    headers: { "Content-type": "application/json" },
    onSuccess: function (_json, _jsonText) {
        Activities = _json;
    }
}).send();
我已确认,
活动
变量正在通过此请求进行更新。但是,autocompleter类中的
标记
变量仍然是它初始化为的数组


如何获取它以使
标记
变量指向与
活动
变量相同的数据?

问题在于您正在重写数组。您应该替换这些元素。您可以通过以下方式在位添加和删除图元:

这将删除所有元素(从
0
Activities.length
),并从
\u json
数组中添加每个元素

但是
\u json
可能包含未知数量的元素,像上面那样硬编码是非常糟糕的。幸运的是,我们可以使用该方法调用参数数量可变的方法,如数组所示:

var params = [0, Activities.length].concat(_json);
Activities.splice.apply(Activities, params);
这相当于上面的调用,但是添加了
\u json
中的所有元素


参考:

问题是您正在覆盖数组。您应该替换这些元素。您可以通过以下方式在位添加和删除图元:

这将删除所有元素(从
0
Activities.length
),并从
\u json
数组中添加每个元素

但是
\u json
可能包含未知数量的元素,像上面那样硬编码是非常糟糕的。幸运的是,我们可以使用该方法调用参数数量可变的方法,如数组所示:

var params = [0, Activities.length].concat(_json);
Activities.splice.apply(Activities, params);
这相当于上面的调用,但是添加了
\u json
中的所有元素


参考:

谢谢。我完全错误地看待这个问题。我必须盯着拼接/应用的东西看10分钟,才能弄清楚那里发生了什么@奥利弗:不客气:)哦,我现在解释得好一点了。谢谢。我完全错误地看待这个问题。我必须盯着拼接/应用的东西看10分钟,才能弄清楚那里发生了什么@奥利弗:不客气:)哦,我现在解释得好一点了。