【问题标题】:Can't replace hard-coded property name value with variable value in function call无法在函数调用中将硬编码的属性名称值替换为变量值
【发布时间】:2013-04-09 08:48:09
【问题描述】:

我正在尝试在一个旧的 liferay 项目 (3.6) 中使用不显眼的日期选择器,我认为该项目正在运行 prototype.js。

我有这样的电话:

datePickerController.createDatePicker({formElements:{"elementId":"%d/%m/%Y"}});

为此:

createDatePicker:       function(options) { addDatePicker(options); },

我无法使用变量来代替硬编码的 elementId。我尝试过数组索引、点索引、字符串变量等,但无法正常工作。

在我看来,被调用函数只需要一个通常未指定的对象,但如果我执行上述操作之一(数组、点等),浏览器会抱怨括号(数组索引)、点(点索引)、parens 或任何非预期格式。

底层调用模块 (addDatePicker) 需要 formElements,所以我无法更改它。

我不明白浏览器如何知道足以抱怨函数参数的格式......显然我在这里严重缺乏!

非常感谢指针。

例如

obj[tag] = 'elementId'; 
datePickerController.createDatePicker({formElements:{obj[tag]:"%d/%m/%Y"}});     
// SCRIPT1003: Expected ':'

【问题讨论】:

  • 请展示你如何调用createDatePicker 9 至少一个例子)。很可能存在错误。

标签: javascript unobtrusive


【解决方案1】:

您不能将变量键放在对象字面量中 - 语法要求键是常量值。

您需要创建对象并填充它,然后传递它:

var obj = {};
var tag = 'elementId';
obj[tag] = "%d/%m/%Y";
// you now have obj = { elementId: "%d/%m/%Y" }

...createDatePicker({ formElements: obj });

【讨论】:

  • 谢谢!这有很大帮助。

    最后,有效的调用是 ...createDatePicker( formElements: obj );

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 2021-07-04
相关资源
最近更新 更多