2015-02-25 2 views
-1

Изучение магистрали JS в эти дни. Iam становится ниже ошибки: я действительно не понимаю, что пошло не так, поэтому, пожалуйста, ознакомьтесь с нижеприведенной ошибкой и предложите мне внести изменения в мой код.Backbone Uncaught TypeError: строка не является функцией

Uncaught TypeError: string is not a function wines.html:56 
app.WineView.Backbone.View.extend.render wines.html:56 
app.WinesListView.Backbone.View.extend.addOne wines.html:73 
(anonymous function) underscore.js:70 
h.each.h.forEach underscore.js:103 
g.(anonymous function) backbone.js:966 
app.WinesListView.Backbone.View.extend.addAll wines.html:69 
f backbone.js:208 
e.Events.trigger backbone.js:148 
i.extend.reset backbone.js:770 
t.success backbone.js:865 
j jquery.js:3073 
k.fireWith jquery.js:3185 
x jquery.js:8251 
(anonymous function) 

Вот мой код:

<div id="header"> 
    <input type="button" value="New Wine" /> 
</div> 
<div id="sidebar"> 
    <ul class="wines-list"></ul> 
</div> 
<div id="content"> 

</div> 

<script type="text/template" id="wine"> 
    <a href="#wines/<%= id %>"> 
     <%=n ame %> 
    </a> 
</script> 


<script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.7.0/underscore-min.js"></script> 
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<script src="http://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone-min.js"></script> 


<script type="text/javascript"> 
var app = {} 

app.Wine = Backbone.Model.extend({ 
    urlRoot: "api/wines", 
    defaults: { 
     "id": null, 
     "name": "", 
     "grapes": "", 
     "country": "USA", 
     "region": "California", 
     "year": "", 
     "description": "", 
     "picture": "" 
    } 
}); 

app.WinesList = Backbone.Collection.extend({ 
    model: app.Wine, 
    url: 'api/wines' 
}); 
app.winesList = new app.WinesList(); 
app.WineView = Backbone.View.extend({ 
    tagName: 'li', 
    template: $('#wine').html(), 
    render: function() { 
     this.$el.html(this.template(this.model.toJSON())); 
     return this; 
    } 
}); 

app.WinesListView = Backbone.View.extend({ 
    el: '#sidebar', 
    initialize: function() { 
     this.listenTo(app.winesList, 'reset', this.addAll); 

     app.winesList.fetch({ 
      reset: true 
     }); 
    }, 
    addAll: function() { 
     app.winesList.forEach(this.addOne, this); 
    }, 
    addOne: function(wine) { 
     wineView = new app.WineView({ 
      model: wine 
     }); 
     $('.wines-list').append(wineView.render().el); 
    } 
}); 
app.winesListView = new app.WinesListView(); 
</script> 

Я уже искал в гугле эту ошибку, но не понял, в моем случае.

ответ

1

В вашем wineView атрибута шаблона ссылается на содержимом элемента (поэтому в данном случае строка), которую вы затем пытаетесь использовать в качестве функции (отсюда и ошибка)

попробуйте передать элемент в подчеркивание затем используйте эту функцию в своем рендере, чтобы затем передать свою модель

app.WineView = Backbone.View.extend({ 
    tagName: 'li', 
    template: _.template($('#wine').html()), 
    render: function() { 
     this.$el.html(this.template(this.model.toJSON())); 
     return this; 
    } 
}); 
+0

Спасибо! Я забыл поставить _.template – user3815806

+0

, этот ответ не имеет большого смысла теперь, когда вы удалили часть кода из своего вопроса, который я ссылаюсь. Для людей, читающих это после того, как это не будет более полезно, если они не смогут определить исходную ошибку. – Quince

Смежные вопросы