我想知道是否有人可以帮助找出这种情况下的错误。 我在第6行得到“Uncaught ReferenceError:text not defined”。 使用模板和本地.txt文件进行测试,直到API可用。
Backbone.js模型脚本:
var Letter = Backbone.Model.extend( {
urlRoot: 'data/json/news',
initialize: function() {
},
defaults: {
_type: "",
text: "",
is_read: 0
}
});
var News = Backbone.Collection.extend({
model: Letter,
url: 'data/json/list_news.txt',
initialize: function() {
},
fetchMyNews: function() {
this.fetch({async:false});
}
});
var news = new News();
查看脚本:
var NewsView = Backbone.View.extend({
initialize: function() {
this.isShown = false;
this.render();
this.listenTo(news, "all", this.doListen);
},
doListen: function(eventName){
if(eventName == "change"){
this.render();
}
},
isShown: false,
events: {
},
render: function() {
this.$el.attr("z-index", "1000");
news.fetchMyNews();
var sHtml = JST["news/row"](news.attributes);
$("#news_tbody").html(sHtml);
}
});
答案 0 :(得分:0)
代码中的一些内容。
您正在为您的收藏定义全局变量'news'。不推荐使用,您可以在实例化时将新集合传递给视图:
var NewsView = new NewsView({
collection: new News()
});
并将视图中的所有“新闻”引用更改为“this.collection”
并且,我通常不喜欢异步ajax调用。尝试将它们更改为回调,或者只是在视图中监听事件。哦,而且,尽量不要在render()中获取数据。你的函数应该只做它们的命名。 :)
所以在你看来:
initialize: function() {
this.isShown = false;
this.listenTo(this.collection, "all", this.doListen);
this.collection.fetch();
},
doListen: function(eventName){
if(eventName == "change" || eventName == 'reset'){
this.render();
}
}
并在你的渲染中:
var sHtml = JST["news/row"](new.attributes);
$("#news_tbody").html(sHtml);
你正在呼叫news.attributes,新闻是这里的一个集合......“属性”并没有给你任何东西。我不确定你的模板是什么样的,但你可能在你的模板中调用'.text',因为news.attributes是未定义的,所以这里给出了你的错误。