2014-01-07 84 views
0

我是新蜜蜂試圖與骨幹嬰兒的步驟,並強調,堅持了這個錯誤誤差模型沒有定義

Uncaught ReferenceError: data is not defined .

請諮詢我有什麼問題。

這裏是我的html當你說_.template($('#template1').html())_.template將模板文本轉換爲JavaScript函數它擁有所有的JS和模板

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="UTF-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
    <title>To-do App in Backbone.js</title> 
</head> 
<body> 
<!-- ========= --> 
<!-- Your HTML --> 
<!-- ========= --> 

<div id="page"> 
    <div id="content"/> 
</div> 


<!-- ========= --> 
<!-- Libraries --> 
<!-- ========= --> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script> 
<script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.3/underscore-min.js" type="text/javascript"></script> 
<script src="http://cdnjs.cloudflare.com/ajax/libs/backbone.js/0.9.2/backbone-min.js" type="text/javascript"></script> 


<script type="text/template" id="template1"> 
    <div> 

     My modal value =<%= data %> 

    </div> 
</script> 

<!-- =============== --> 
<!-- Javascript code --> 
<!-- =============== --> 
<script type="text/javascript"> 

    var HomeModel=Backbone.Model.extend({ 
       data :'some dummy value loaded from server' 
    }); 

    var HomeView=Backbone.View.extend({ 
      render:function(){ 
       var template = _.template($('#template1').html()); 
       $('#content').html(template(new HomeModel().toJSON())); 
      } 
    }); 

    var HomeViewIns= new HomeView(); 
    HomeViewIns.render(); 
</script> 

</body> 
</html> 

回答

2

,如果你看一下這個函數的源利用其source財產,你會看到這樣的事情(略清理):

function(obj){ 
    //... 
    with(obj||{}){ 
     __p += ... ((__t=(data )) ... 
    } 
    return __p; 
} 

而且也提及data知道導致錯誤。模板函數使用with來獲取JavaScript以查找變量(如data)作爲要傳遞給模板函數的obj對象的屬性。

您的ReferenceError告訴您new HomeModel().toJSON()中沒有data屬性。爲什麼不在那裏?它不存在,因爲骨幹模型返回屬性當您調用toJSON對他們和屬性不相同屬性。你確定你的HomeModeldata屬性

var HomeModel=Backbone.Model.extend({ 
    data :'some dummy value loaded from server' 
}); 

,但沒有屬性。這意味着toJSON會爲您提供一個空對象(即{}),並且空對象中沒有data

如果你希望你的模型有一個data屬性然後嘗試添加defaults它來代替:

var HomeModel = Backbone.Model.extend({ 
    defaults: { 
     data: 'some dummy value loaded from server' 
    } 
}); 

演示:http://jsfiddle.net/ambiguous/PQN63/

+0

唉,你打秒我:)你是一個更好的答案,更具說明性! – Meta

+0

非常感謝,很好的解釋謝謝。 – user884424

+0

什麼是不同的屬性和屬性何時使用屬性vs屬性來存儲我的對象狀態?嘗試谷歌沒有找到,請幫助 – user884424

1

問題是data不考慮的屬性你的模型,但是模型實例的一個屬性。

當定義你的屬性的默認值,你必須使用在骨幹模型defaults屬性來做到這一點:

defaults : { 
    attributeName : defaultValue 
} 

當你實例化一個模型,骨幹將讓你在構造函數作爲參數傳遞對象和defaults對象中的構造模型的屬性。

檢查這個JSFiddle