下划线模板在调试器中不起作用
Underscore template doesn't work in debugger
// run with console open
//and paste following when you hit the debugger:
/*
_.templateSettings = {
interpolate: /\{\{(.+?)\}\}/g
};
var template = _.template("Hello {{ name }}!");
console.log(template({name: "Mustache"}))
*/
debugger
//should return:
//underscore-min.js:5Uncaught TypeError: Cannot read property 'call' of undefined
//out of debugger though, it works:
_.templateSettings = {
interpolate: /\{\{(.+?)\}\}/g
};
var template = _.template("Hello {{ name }}!");
console.log(template({name: "Mustache"}))
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
我无法在调试器中 运行 underscore's sample template 编码(我想在控制台中使用实际数据)。
- .js 文件中的代码 运行 没问题。 ✓
- 页面加载后粘贴到控制台中 运行没问题。 ✓
在调试器断点时粘贴 - 不起作用。 ✘
_.templateSettings = {
interpolate: /\{\{(.+?)\}\}/g
}
var template = _.template("Hello {{ name }}!");
template({name: "Mustache"});
错误:
underscore.js:1461 Uncaught TypeError: Cannot read property 'call' of undefined
编辑:
template({name: "Mustache"});
上的错误
下划线版本 1.8.3 的
var template = function(data) {
return render.call(this, data, _);
};
这是 Function
实例化(第 1454 行下划线)的症状,可以使用以下语句重新创建:
new Function('return true;')
在浏览器中打开任何页面(即使是这个),将其复制到控制台并执行,它将打印以下内容:
function anonymous() {
return true;
}
但是,如果页面当前在调试器中暂停,语句returns undefined
。我在 Firefox 中尝试了 运行,它也不起作用,甚至 return。
我无法解释在调试器中暂停时对 V8 (Chrome) 或 SpiderMonkey (Firefox) Javascript 引擎的影响。
如果您真的需要它,这里有一个解决方法:https://jsfiddle.net/na4Lpt7L/
var source = "Hello {{ name }}!";
debugger;
var template = _.template(source);
debugger;
第一个断点命中时:
> source = "Goodbye {{ name }}!";
< "Goodbye {{ name }}!"
现在继续执行,在第二个断点处:
> template({name: "Mustache"});
< "Goodbye Mustache!"
如果你想尝试几个选项,我会说坚持下去 (while (source.length) { ... }
)
// run with console open
//and paste following when you hit the debugger:
/*
_.templateSettings = {
interpolate: /\{\{(.+?)\}\}/g
};
var template = _.template("Hello {{ name }}!");
console.log(template({name: "Mustache"}))
*/
debugger
//should return:
//underscore-min.js:5Uncaught TypeError: Cannot read property 'call' of undefined
//out of debugger though, it works:
_.templateSettings = {
interpolate: /\{\{(.+?)\}\}/g
};
var template = _.template("Hello {{ name }}!");
console.log(template({name: "Mustache"}))
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
我无法在调试器中 运行 underscore's sample template 编码(我想在控制台中使用实际数据)。
- .js 文件中的代码 运行 没问题。 ✓
- 页面加载后粘贴到控制台中 运行没问题。 ✓
在调试器断点时粘贴 - 不起作用。 ✘
_.templateSettings = { interpolate: /\{\{(.+?)\}\}/g } var template = _.template("Hello {{ name }}!"); template({name: "Mustache"});
错误:
underscore.js:1461 Uncaught TypeError: Cannot read property 'call' of undefined
编辑:
template({name: "Mustache"});
var template = function(data) {
return render.call(this, data, _);
};
这是 Function
实例化(第 1454 行下划线)的症状,可以使用以下语句重新创建:
new Function('return true;')
在浏览器中打开任何页面(即使是这个),将其复制到控制台并执行,它将打印以下内容:
function anonymous() {
return true;
}
但是,如果页面当前在调试器中暂停,语句returns undefined
。我在 Firefox 中尝试了 运行,它也不起作用,甚至 return。
我无法解释在调试器中暂停时对 V8 (Chrome) 或 SpiderMonkey (Firefox) Javascript 引擎的影响。
如果您真的需要它,这里有一个解决方法:https://jsfiddle.net/na4Lpt7L/
var source = "Hello {{ name }}!";
debugger;
var template = _.template(source);
debugger;
第一个断点命中时:
> source = "Goodbye {{ name }}!";
< "Goodbye {{ name }}!"
现在继续执行,在第二个断点处:
> template({name: "Mustache"});
< "Goodbye Mustache!"
如果你想尝试几个选项,我会说坚持下去 (while (source.length) { ... }
)