替换关联数组变量
Replacing an Associative Array Variable
问题如下:
我的javascript文件包含以下代码…
$(function() {
var names;
var names_hash = { };
// When an user types in a letter in the student name input field
$(".container").on("keyup", "#term", function(){
// Here we are submitting the form via AJAX. The form contains necessary
// Rails code to initiate the AJAX
$(this).parents(".student-search-form").submit();
});
$(".container").on("click", ".add_nested_fields", function() {
var term = $("#term").val();
console.log(names_hash);
});
});
现在,当我在输入字段中输入id为term
的字符时,调用Rails控制器动作并使用以下javascript响应。
仅供参考,@group_users_hash
只是一个Ruby哈希值,我必须调用html_safe
,以便它可以正确转换为Javascript关联数组(是的,我知道它真的只是一个对象)。
names_hash = <%= @group_users_hash.html_safe %>;
console.log(names_hash);
所以当AJAX完成时,我看到console.log(names_hash);
已经在我的控制台上产生了
Object {1: "Jason"}
但是当我点击.add_nested_fields
调用on
事件时,我的控制台日志显示
Object {}
我不知道为什么assoc_array
没有更新。我的代码有什么问题,我该如何修复它?
看起来您的names_hash
(无论如何通过var names_hash
在您的返回中重新定义,然后阴影任何更高作用域的变量)与您在点击时打印它的作用域不同。多亏了您的包装器函数。您将需要一些方法-通过事件或回调等-访问该范围内的变量并将其设置为您希望使用的值。
编辑
一个非理想但可以进一步解释的示例解决方案是:
var names_hash = {};
$(function() {
$(".container").on("click", ".add_nested_fields", function() {
console.log(names_hash);
});
});
当你收到回复时,你只需:
names_hash = <%= @group_users_hash.html_safe %>;
然后你应该是金色的。这不是理想的原因是因为您的names_hash在全局作用域中浮动。最好使用"命名空间",例如:
(function() {
// prevent redefining it if it's already defined via another file
var MyNamespace = window.MyNamespace || {};
MyNamespace.names_hash = {};
window.MyNamespace = MyNamespace;
})();
$(function() {
$(".container").on("click", ".add_nested_fields", function() {
console.log(MyNamespace.names_hash);
});
});
从那里你修改你的回答:
MyNamespace.names_hash = <%= @group_users_hash.html_safe %>;
和中提琴。您已经保护了全局作用域,并且还公开了希望在包装器函数之外访问的函数。
相关文章:
- Angularjs:访问范围变量数组并计算平均值
- 将 php 变量(数组)json_encode JavaScript 变量时的键排序
- 具有公共属性的变量数组
- Highcharts将变量数组添加到序列中
- 如何在Javascript函数中添加php变量/数组(在jsGrid({controller})中)
- Javascript项目通过变量数组进行搜索
- 用于交替结果的变量数组
- 如何将变量数组从 laravel 控制器传递到我的 ajax 函数
- 如何在 Javascript 中从数组创建变量数组
- 使用 Javascript 创建变量数组(动态,下拉)
- .serialize() Javascript 中的变量数组
- 更改全局变量(数组)的 JavaScript 函数
- 使用变量数组调用函数
- 使用 JavaScript 变量数组
- 如何使用静态变量数组
- 变量数组+正则表达式不能一起工作
- 将变量数组大写
- 变量数组中的对象是否可能有2个值
- 将java变量/数组传递给android webview中的javascript
- 从for循环(Javascript)中创建变量数组