如何在下划线模板中将javascript变量解释为属性
How to get javascript variable to be interpreted as attribute in underscore templates
假设我有一个传递到下划线模板的以下属性:name
和animaltype
。我还有一个属性,它根据动画类型而变化。例如,如果animaltype为CAT,则该属性称为cat_id
。如果是,则动画类型为DOG,则属性为dog_id
,依此类推
我为每个动画类型id创建了一个输入框,但只有具有相应动画类型id的框才应该填充(通过属性映射)。这个ID输入框是我无法映射到属性值的框,因为我正在使用javascript创建属性的名称。因此,插入的是实际的javascript变量名,而不是与javascript变量名匹配的相应解析属性值。
这是小提琴http://jsfiddle.net/leopardy/fev4vqmg/1/
我应该得到的是
名称:蓬松
类型:CAT
CAT ID:005
狗ID:
BIRD ID:
我真正得到的是
名称:蓬松
类型:CAT
CAT ID:CAT_ID
狗ID:
BIRD ID:
其中cat_id属性未在模板中解析。
顺便说一句,在我的真实代码中,我隐藏了与动物类型不对应的其他ID输入框,但为了简化起见,我没有包括隐藏/显示。
您有一个常见的"我在另一个变量中有一个变量名"问题,解决方案一如既往:将需要按名称查找的东西放在查找表(即JavaScript中的对象)中。
在你的情况下,我不会用_.extend(attributes, {animalTypes:animalTypes});
把所有东西都堆成一堆,我会把attributes
和animalTypes
分开,这样你的_.template
调用就会看起来像这样:
var tmpl = _.template(template);
var html = tmpl({
animalTypes: animalTypes,
attributes: attributes
});
现在,您可以在模板中说出类似attributes['cat_id']
的内容。当然,您必须通过animalTypes
或attributes
引用所有内容,但这很小。你的模板看起来像这样:
<table>
<tbody>
<tr>
<td>Name:</td>
<td>
<input name="name" type="text" value="<%= attributes.name %>"/>
</td>
</tr>
<tr>
<td>Type:</td>
<td>
<input name="animal_type" type="text" value="<%= attributes.animaltype %>"/>
</td>
</tr>
<% for (var key in animalTypes) { %>
<% var typeID= (key).toLowerCase() +"_id" %>
<tr>
<td><%= key %> ID:</td>
<% if (attributes.animaltype === key) { %>
<td>
<input value="<%= attributes[typeID] %>" name="<%= typeID %>" type="text"/>
</td>
<% } else { %>
<td>
<input value="" name="<%= typeID %>" type="text"/>
</td>
<% } %>
</tr>
<% } %>
</tbody>
</table>
解决您眼前问题的部分是:
<input value="<%= attributes[typeID] %>" name="<%= typeID %>" type="text"/>
更新的演示:http://jsfiddle.net/ambiguous/qj3ru1mL/1/
它实际上是非常直接的
编辑使用参数[0][typeId]
<input value="<%= arguments[0][typeID] %>" name=<%= (key).toLowerCase() +"_id"%> type="text"/>
不要使用eval,即使没有人对你大喊大叫;)以下是工作小提琴的链接:http://jsfiddle.net/j872q5gm/1/
感谢@Adrian Lynch提醒我要做一个好的JS公民;)
- 调用类向后变量 (JavaScript)
- 初始化父类中的变量(JavaScript/CoffeeScript 习语)
- 可以'找不到变量javascript错误
- 输出数组变量javascript
- 自提交表单访问变量javascript
- 将变量 javascript 添加到用于旋转图像的链接中
- 在文本字段中显示保存的本地存储变量 - javascript
- 将变量添加到变量 JavaScript 中
- 获取要在变量 JavaScript 中使用的用户输入值
- 如何在变量 Javascript 中删除双引号
- 使用变量 javascript 从 json 文件中获取数据
- 读取输入和打印变量 - JavaScript 和 HTML 4.01
- 传递 PHP 变量 JavaScript 窗口位置
- 重置变量 JavaScript
- 变量 JavaScript 中的变量
- 尝试使用多个函数时无法使用全局变量 - JavaScript - 初学者
- 如何按值将数组分配给另一个变量 JavaScript
- setTimout 搞砸了变量 JavaScript
- 用内部函数变量更改外部函数变量?Javascript
- 根据变量 JavaScript 增加