0

所以我看到了与这个问题有关的其他帖子,但无论我努力采纳他们的建议,我似乎都无法解决这个问题。所以这里是代码:

我在这里做错了什么,启动应用程序的最佳方法是什么?

整个应用程序:

var Person = Backbone.Model.extend({

defaults : {
    name : ""
}

});

var PersonView = Backbone.View.extend({

el : $('body'),

tagName: 'li',

initialize : function() {
    this.render();
},

render : function(){
    var template = _.template( $("#person").html(), {} );

    this.$el.html(template);

    return this;
}

});

带模板的 HTML:

    <script type="text/template" id="person">
        <h1><%= name %></h1>
    </script>

    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
    <script type="text/javascript" src="js/underscore.js"></script>
    <script type="text/javascript" src="js/backbone.js"></script>
    <script type="text/javascript" src="app.js"></script>
4

2 回答 2

1

乍一看,您似乎错误地定义了 DOM 位置。

el : $('body'),

tagName: 'li',

el应该是 jQuery 选择器字符串而不是对象

el : 'body'

但是,this.$el$('body')有效,因此this.$el.html(template)将尝试将数据放入<body>标签中。

看起来tagName: 'li',您希望拥有多个 PersonView,因此我建议根本不定义该el属性,然后this.$el在视图呈现后附加到您需要它的任何父元素。

于 2013-07-16T10:55:53.187 回答
0

在进一步审查中,“整个应用程序”表明您没有初始化任何东西。

您拥有的 Javascript 定义了一个 Person 类和一个 PersonView 类。大概,您将希望实例化 Person 类的一个或多个对象,然后为每个 Person 实例化一个 PersonView,这是通过使用来实现的new,因为mu 太短了

实际上,您拥有的代码就是设置,现在您需要启动它。

var joe = new Person;
var joeView = new PersonView({ person: joe });

该片段假定您将期待{ person: joe }在 PersonView 中,但您并非如此,但抛出的错误应该为您指明更好的方向。

于 2013-07-16T11:05:42.827 回答