【发布时间】:2014-06-07 01:40:03
【问题描述】:
不久前,我在 Stackoverflow 上发布了this 问题。基本上,这是我第一次尝试在自己的项目中尝试 Backbone.js,上一篇文章的问题已经解决。
但是现在,当加载此页面时,我可以在 Chrome 控制台窗口中看到以下 javascript 错误。
Uncaught ReferenceError: completed is not defined VM46:6
(anonymous function) VM46:6
_.template.template underscore.js:1308
Backbone.View.extend.render example_addbutton.html:69
Backbone.View.extend.initialize example_addbutton.html:65
Backbone.View backbone.js:1031
child backbone.js:1658
(anonymous function)
花了一个小时排除故障后,我将问题追溯到这部分代码。
<script id="taskTemplate" type="text/template">
<span class="<%=completed ? 'completed' : 'incomplete' %>"><%= text %></span>
<button class="complete"></button>
<button class="delete"></button>
</script>
提示下划线的模板引擎无法理解“完成”变量。
我已经在这里声明了怎么可能呢?
var Tasks = Backbone.Collection.extend({
model: Task,
completed: function(){
return _.filter(this.models, function(model){
return model.get('completed');
});
},
});
我做错了什么??
【问题讨论】:
-
该错误与
template方法有关,调用模板函数时应传递completed属性。您发布的代码与抛出的错误无关。 -
谢谢!再次重读代码后,我意识到在将变量传递给模板引擎进行渲染时,我的主干模型声明与完成属性有问题。我现在正在调查。干杯!
-
提示:您可以缩短
Tasks集合:由于Backbone 集合中的所有Underscore 集合方法都可用,您可以将completed减少为return this.filter(...);;)
标签: javascript jquery backbone.js