Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 骨干初学者可以';t使视图显示在屏幕上_Backbone.js - Fatal编程技术网

Backbone.js 骨干初学者可以';t使视图显示在屏幕上

Backbone.js 骨干初学者可以';t使视图显示在屏幕上,backbone.js,Backbone.js,有人能帮我弄清楚为什么我加载这个html时会发生任何事情吗?它由Python的SimpleHTTPServer在本地提供,现在我只想在屏幕上显示单词sample和user main.js /* Model */ var User = Backbone.Model.extend({}); var sample_user = new User({ name: { first: 'sample', last: 'use

有人能帮我弄清楚为什么我加载这个html时会发生任何事情吗?它由Python的SimpleHTTPServer在本地提供,现在我只想在屏幕上显示单词sample和user

main.js

    /* Model */

    var User = Backbone.Model.extend({});

    var sample_user = new User({
        name: {
          first: 'sample',
          last: 'user'
        }
    });

    /* View */

    var UserView = Backbone.View.extend({

        tagName: 'div',

        className: 'card',

        template: _.template( $('#card_template').html() ),

        render: function() {
          this.$el.html( this.template( this.model.toJSON() ) );
          return this;
        }

    });

    var sample_card = new UserView({ model: sample_user });
    sample_card.render();
main.html

<!doctype html>
<html>
<head>
  <title>Backbone kickstart</title>
</head>
<body>
  <script type="text/template" id="card_template">
    <h1><%= name.first + ' ' + name.last %></h1>
  </script>
  <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore.js" charset="utf-8"></script>
  <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.js" charset="utf-8"></script>
  <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.0/backbone.js" charset="utf-8"></script>
  <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/d3/3.4.1/d3.min.js" charset="utf-8"></script>
  <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/topojson/1.1.0/topojson.min.js" charset="utf-8"></script>
  <script type="text/javascript" src="main.js" charset="utf-8"></script>
</body>
</html>

主干网启动

当您构建自己的
el
时,默认情况下,主干的
呈现
不会对页面做任何事情。您的
渲染

render: function() {
  this.$el.html( this.template( this.model.toJSON() ) );
  return this;
}
只需填写视图的
el
,但实际上没有人将
el
添加到页面中。在您的案例中,通常的模式如下:

var sample_card = new UserView({ model: sample_user });
$('body').append(sample_card.render().el);

在这里,我建议不要将模板放在
中,这样很容易意外地覆盖它们。如果他们在
中,你会过得更好,而你可能不会操纵他们。

回答得很好,谢谢你的帮助。顺便问一下,是否可以将模板放在外部的.html文件上?这是可能的,但会给您带来令人不快的AJAX问题。通常,您需要设置服务器代码以获取适当的模板文件,并将它们内联到
中。在服务器端添加一点node.js代码以将模板预编译到
JST={'template name':compiled_template_function,…}
结构中也是很常见的,那么编译后的模板将位于
.js
文件中,您可以像任何其他
.js
文件一样包含该文件。请记住,
f=u.template(x)
返回一个函数,该函数的JavaScript源代码位于
f.source
中。哦,好的。我想现在我会坚持你的建议,等待埃里克·拜德曼在他的教程中介绍下一步。我强烈期望所有web技术都能有一个更简单、更模块化的未来。JS已经在此路径上。