1

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

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

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

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

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

请看我的代码:

JS / 骨干:

(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>

非常感谢

4

2 回答 2

2

让我们一步一步来。

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

2. this.model,现在你从答案 1 中得到它,你会得到你的 this.model。您需要通过将模型作为参数传递来将模型设置为视图。

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

用户模型示例:-

模型:- 这将包含单个用户的信息。集合:- 这将包含多个用户的信息(每个用户都是用户模型的一个实例)。视图:- 它将成为您用户的 UI。骨干中的视图与名称“视图”几乎没有混淆。它必须被称为控制器,因为它们控制模板上的事件列表并操作集合中的数据及其模型

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

5.我希望以上答案也能回答你这个问题。

于 2013-06-07T11:41:12.447 回答
1

Backbone 上有一些约定,使其更易于使用。

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

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

于 2013-06-07T11:32:18.083 回答