不久前,我在Stackoverflow上发布了this问题。基本上,这是我第一次尝试在我自己的项目中尝试使用Backbone.js,之前的发布问题已得到解决。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>
建议Underscore的模板引擎无法理解“已完成”变量。
当我已经在这里申报时,这怎么可能?
var Tasks = Backbone.Collection.extend({
model: Task,
completed: function(){
return _.filter(this.models, function(model){
return model.get('completed');
});
},
});
我做错了什么?
错误与'template'方法有关,您应该在调用模板函数时传递'completed'属性。您发布的代码与抛出的错误无关。 – undefined
谢谢!在重新读取代码之后,我意识到在将变量传递给模板引擎进行渲染时,我的骨干模型声明和完成的属性出了问题。我目前正在调查。干杯! – awongCM
提示:你可以缩短你的'Tasks'集合:因为所有的Underscore收集方法都可以在Backbone集合中使用,所以你可以将'completed'减少到'return this.filter(...); ';) –