3

私は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: ''
}
4

2 に答える 2

6

補間されたすべての変数の値を指定する必要があります。このようなテンプレート:

<%= Id %>

次のようなラッパーであるJavaScript関数にコンパイルされます。

with(obj || {}) {
    __p += '' + ((__t = Id) == null ? '' : __t ) + '';
}

コンソールを開いた状態でこのデモを見てください。Idしたがって、テンプレート関数は、ローカル変数として、またはdata渡すオブジェクトのキーとしてを探します。

あなたの問題はあなたdataが空であるということです:

render: function() {
    var data = {}; // <------------------------------- Empty
    var compiledTemplate = _.template(productTemplate, data);
    this.$el.append(compiledTemplate);
}

私はあなたがこれを言いたいと思います:

_.template(productTemplate, this.model.toJSON())

モデルのデータをテンプレートに取り込むため。

于 2012-10-19T16:24:28.927 に答える
1

適切なエラーが示すように、定義されていない変数にアクセスしようとしています。モデルのデータを確認してください。サーバーからフェッチする場合は、実際のデータがBackboneに送られることを確認してください(firebugまたはchrome開発ツールを使用してください)。

于 2012-10-19T13:47:06.417 に答える