我的视图不会从我的控制器接收数据

时间:2011-11-01 13:26:09

标签: javascript jquery backbone.js

我将只显示我遇到问题的部分代码。如果您认为需要查看所有代码,请告诉我们。

我的控制器:

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?

谢谢,

3 个答案:

答案 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