【问题标题】:Getting an exception while loading a template. Underscore/Backbone加载模板时出现异常。下划线/主干
【发布时间】:2012-10-19 13:46:07
【问题描述】:

我收到带有文本的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: ''
}

【问题讨论】:

    标签: javascript jquery backbone.js requirejs underscore.js


    【解决方案1】:

    您需要为所有插值变量提供值。像这样的模板:

    <%= 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())
    

    为了将模型的数据放入模板中。

    【讨论】:

      【解决方案2】:

      正如正确的错误所说,您正在尝试访问未定义的变量。检查模型的数据。 如果您从服务器获取,请确保实际数据到达 Backbone(使用 firebug 或 chrome 开发工具)。

      【讨论】:

      • 我已经检查过了。一切都好。我不知道属性大小写是否重要,并在服务器端将其更改为与客户端相同。
      • 然后在视图内部做一个console.log(this),看看它从视图中得到了什么。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多