答案可能是在SO上,但它们并没有真正解释我要问的问题。
每当我在视图中引入带有模板的this.model.toJSON()
时,我总是会在Firebug中收到此错误:this.model is undefined
现在,SO中的许多答案并没有真正解释this.model
是什么,他们只是解决了提问者的问题。所以我的问题是:
this.model
以及它来自何处或如何定义和使用它(在错误中,它是未定义的)?this.model
与Backbone.View
,Backbone.Collection
和Backbone.Model
之间的关系是什么?this.model
和this.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>
非常感谢
答案 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