我将只显示我遇到问题的部分代码。如果您认为需要查看所有代码,请告诉我们。
我的控制器:
index: function() {
var documents = new App.Collections.Documents();
documents.fetch({
success: function() {
new App.Views.Index({ collection: documents });
},
error: function() {
new Error({ message: "Error loading documents." });
}
});
},
我的观点:
App.Views.Index = Backbone.View.extend({
initialize: function() {
console.log(this.documents);
this.documents = this.options.documents;
this.render();
},
render: function() {
if(this.documents.length > 0) {
var out = "<h3><a href='#new'>Create New</a></h3><ul>";
_(this.documents).each(function(item) {
out += "<li><a href='#documents/" + item.id + "'>" + item.escape('title') + "</a></li>";
});
out += "</ul>";
} else {
out = "<h3>No documents! <a href='#new'>Create one</a></h3>";
}
$(this.el).html(out);
$('#app').html(this.el);
}
});
文档代码的console.log是:undefined 在控制器中, var document 有效。
WHYYyY?如何在视图中访问Controller发送的json?
谢谢,
答案 0 :(得分:1)
console.log(this.documents);
this.documents = this.options.documents;
您在this.documents
之前使用console.log甚至已设置。
更新:
new App.Views.Index({ collection: documents });
this.documents = this.options.documents;
不是this.documents = this.options.collection;
吗?因为我没有看到你在任何地方传递option.documents变量。
答案 1 :(得分:1)
您通过了collection: documents
,因此在您的视图中,您可以使用this.collection
访问它。
查看显示正常工作的jsfiddle:http://jsfiddle.net/dira/TZZnA/
答案 2 :(得分:0)
我不太了解骨干...但是在进入初始化函数之前定义了this.documents
?似乎不是 - 尝试切换线:
this.documents = this.options.documents; // define the variable
console.log(this.documents); // console log it