2012-10-19 119 views
3

我越來越Uncaught ReferenceError文本:沒有定義標識例外加載模板時出現異常。下劃線/骨幹

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); 
} 
... 

什麼能引起t他會拋出異常? 謝謝!

編輯

模型定義像默認:

defaults: { 
    Id: '00000000-0000-0000-0000-000000000000', 
    Price: 0.0, 
    Category: 'empty', 
    Title: 'untitled', 
    Details: '', 
    Thumbnail: '' 
} 

回答

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

由於正確的錯誤說,你要訪問沒有定義一個變量。檢查模型的數據。 如果您從服務器獲取數據,請確保實際數據到達Backbone(使用Firebug或chrome開發工具)。

+0

我檢查過了。一切都好。我不知道屬性事件是否重要,並且在服務器端將其更改爲與客戶端相同。 – lexeme

+1

然後在視圖內部做一個console.log(this),看看它從視圖中得到了什麼。 – alexandernst

+0

好的,我會這樣做,謝謝你的建議) – lexeme