我收到Uncaught ReferenceError
的文字: ID未定义例外
Uncaught ReferenceError: Id is not defined
(anonymous function)
y.templateunderscore-min.js:5
Backbone.View.extend.renderProductView.js:13
Backbone.View.extend.renderProductListView.js:15
Backbone.View.extend.initializeProductListView.js:4
g.Viewbackbone-min.js:34
dbackbone-min.js:38
appRouter.on.productsList.fetch.successAppRouter.js:18
f.extend.fetch.a.successbackbone-min.js:23
f.Callbacks.ojquery-1.7.2.min.js:2
f.Callbacks.p.fireWithjquery-1.7.2.min.js:2
wjquery-1.7.2.min.js:4
f.support.ajax.f.ajaxTransport.send.d
存储在外部文件中,模板如下所示:
<a class="thumbnail" href="#/products/<%= Id %>">
<img alt="" src="/Content/img/<%= Thumbnail %>" />
<h5><%= Title %></h5>
<p><%= Price %></p>
<p><%= Details %></p>
</a>
其对应的视图将render
方法定义为:
define(['jquery', 'underscore', 'backbone', 'text!templates/product.html'], function ($, _, Backbone, productTemplate) {
var ProductView =
...
render: function() {
var data = {};
var compiledTemplate = _.template(productTemplate, data);
this.$el.append(compiledTemplate);
}
...
什么可能导致抛出异常? 谢谢!
修改
模型定义默认值,如:
defaults: {
Id: '00000000-0000-0000-0000-000000000000',
Price: 0.0,
Category: 'empty',
Title: 'untitled',
Details: '',
Thumbnail: ''
}
答案 0 :(得分:6)
您需要为所有插值变量提供值。像这样的模板:
<%= Id %>
被编译成一个JavaScript函数,它是这样的包装器:
with(obj || {}) {
__p += '' + ((__t = Id) == null ? '' : __t ) + '';
}
在控制台打开的情况下查看this demo,您会看到。因此,您的模板函数将查找Id
作为局部变量或作为传递它的data
对象中的键。
您的问题是data
为空:
render: function() {
var data = {}; // <------------------------------- Empty
var compiledTemplate = _.template(productTemplate, data);
this.$el.append(compiledTemplate);
}
我想你想这样说:
_.template(productTemplate, this.model.toJSON())
以便将模型的数据导入模板。
答案 1 :(得分:1)
正确的错误说明,您正在尝试访问未定义的变量。检查模型的数据。 如果您从服务器获取,请确保实际数据来自Backbone(使用firebug或chrome dev工具)。