骨干错误'this.model未定义',请解释在哪里,如何,什么是'this.model'

时间:2013-06-07 11:21:48

标签: javascript html web-applications backbone.js

答案可能是在SO上,但它们并没有真正解释我要问的问题。

每当我在视图中引入带有模板的this.model.toJSON()时,我总是会在Firebug中收到此错误:this.model is undefined

现在,SO中的许多答案并没有真正解释this.model是什么,他们只是解决了提问者的问题。所以我的问题是:

  • 如何解决我的问题?
  • 什么是this.model以及它来自何处或如何定义和使用它(在错误中,它是未定义的)?
  • this.modelBackbone.ViewBackbone.CollectionBackbone.Model之间的关系是什么?
  • this.modelthis.models之间有什么区别(注意model末尾的's')?
  • 此外,上述与this.collection相关的所有问题?

对这个问题感到抱歉,但我对Backbone很新,我在网上做了无数的研究,书籍和SO,但似乎没有人至少做过一篇文章来解释每个Backbone属性和属性是什么。 ...只是没有深入解释的教程。即使在Addy Osmani Todo tutotrial中,也没有this.model的深入解释,即使它被大量使用。

请参阅我的代码:

JS / Backbone:

(function($) {
    // model
    var AppModel = Backbone.Model.extend({
        defaults : {
            title : 'App Title',
            version : '0.1'
        }
    });

    // collection
    var AppList = Backbone.Collection.extend({
        model : AppModel,
        url : '#'
    });

    // main app view
    var AppView = Backbone.View.extend({
        el : '#app',

        template : _.template($('#app-template').html()),

        initialize : function() {
            _.bindAll(this, 'render');

            this.render();
            console.log(this.template(this.model.toJSON()));
        },

        render : function() {
            console.log(this.$el);
        }
    });

    var app = new AppView;
}(jQuery));

HTML:

<div id="wrapper">
    <!-- Main App -->
    <div id="app"></div>
</div>

<!-- template with underscore.js -->
<script type="text/template" id="app-template">
    <article>
        <h2>App Name: <%= title %></h2>
        <p>Version: <%= version %></p>
    </article>
</script>

非常感谢

2 个答案:

答案 0 :(得分:2)

让我们一步一步走。

1. 如何解决问题? 答案: - var app = new AppView({model:AppList});

2。 this.model,现在你从答案1得到它,你将得到你的this.model。您需要将模型作为参数传递给视图。

3. 模型是单项。您可以将其视为数据库表的单行。 Collection是模型的集合,例如DB

中的多行

用户模型示例: -

型号: - 这将包含单个用户的信息。 集合: - 这将包含多个用户的信息(每个用户是用户模型的实例)。 查看: - 它将成为您的用户的用户界面。在主干中查看有点混淆与名称“视图”。它必须被称为控制器,因为它们控制模板上的事件列表并操纵集合中的数据及其模型

4. 如上所述,模型是单个模型,集合中的this.models是多个多个模型。 this.models是一个单一模型的数组。

5. 我希望上面的答案也会回答你这个问题。

答案 1 :(得分:1)

Backbone上有一些约定可以让它更容易使用。

其中一个约定是,如果将一些特定参数传递给构造函数,它们将作为实例属性(集合,模型...)添加,因此您可以在其他函数中使用它们。

请查看文档,其中包含的内容非常好:http://backbonejs.org/#View-constructor