Javascript 通过引用传递/存储数组?
我对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); /
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分钟,才能弄清楚那里发生了什么@奥利弗:不客气:)哦,我现在解释得好一点了。