Javascript 使用带数字键的对象渲染u0.template
使用下划线.js的Javascript 使用带数字键的对象渲染u0.template,javascript,underscore.js,Javascript,Underscore.js,使用下划线.js的模板方法遇到了一些奇怪的行为: var test = ['first', 'test']; console.log(_.template('this is a <%= 1 %> ', test)); var-test=['first','test']; console.log(u.template('this is a',test'); (小提琴:) 此代码段输出:“这是一个1”,而预期结果是“这是一个测试” 不会抛出任何错误。我已经研究了这个结果,但没有明显的
模板
方法遇到了一些奇怪的行为:
var test = ['first', 'test'];
console.log(_.template('this is a <%= 1 %> ', test));
var-test=['first','test'];
console.log(u.template('this is a',test');
(小提琴:)
此代码段输出:“这是一个1”,而预期结果是“这是一个测试”
不会抛出任何错误。我已经研究了这个结果,但没有明显的解释。要求我只在模板中使用插值。我已经尝试过使用\ux.extend({},test)
将数组显式转换为集合,但没有骰子
如何才能使其正常工作?数字不是有效的javascript引用 在这里,您可能想这样写:
如果不起作用,则将数组传递给对象键:
_.template('this is a <%= list[1] %> ', { list: test })
\uu0.template('这是一个',{list:test})
数字不是有效的javascript引用
在这里,您可能想这样写:
如果不起作用,则将数组传递给对象键:
_.template('this is a <%= list[1] %> ', { list: test })
\uu0.template('这是一个',{list:test})
您可以使用以下方法检查编译的模板代码:
_.template('this is a <%= 1 %> ').source
关键部分是:
with(obj){
(1)
}
因为1不是有效的属性/变量名,所以它不会尝试匹配您正在模板化的对象的属性,所以只需打印出“1”
如果要使用像{zero:'first',one:'test'}
这样的对象和'这是一个'
的模板,那么这看起来像:
with(obj){
(one)
}
这相当于对象1。您可以使用以下方法检查编译的模板代码:
_.template('this is a <%= 1 %> ').source
关键部分是:
with(obj){
(1)
}
因为1不是有效的属性/变量名,所以它不会尝试匹配您正在模板化的对象的属性,所以只需打印出“1”
如果要使用像{zero:'first',one:'test'}
这样的对象和'这是一个'
的模板,那么这看起来像:
with(obj){
(one)
}
这相当于
obj.one
函数需要的是一个对象,而不是数组。@Jack当我显式地将其转换为一个对象时,我得到了相同的结果(如问题中所述)。请参阅fiddle以了解特定的示例。函数需要一个对象,不是数组。@Jack当我显式地将其转换为对象时,我得到了相同的结果(如问题中所述)。请参阅fiddle以了解具体的示例。
不起作用,而第二个代码段起作用。虽然它不是有效的引用,但我认为(可能希望如此)它将尝试通过括号表示法从集合中检索值,在这种情况下,test[1]
是有效的。1
是有效的表达式,
包装表达式。
不起作用,而第二个代码段起作用。虽然它不是有效的引用,但我认为(可能希望如此)它将尝试通过括号表示法从集合中检索值,在这种情况下,test[1]
是有效的。1
是有效的表达式,
包装表达式。