我的下划线模板不会加载/显示所有模型数据,但是可以访问它吗?

时间:2014-04-04 15:09:37

标签: javascript jquery backbone.js underscore.js underscore.js-templating

更新2

我得到它的工作,为了修复我只是更改我的var名称,但现在我JSON编码它,它似乎工作正常。

由于

格伦。

更新

现在感谢您的帖子了,但是就像我在评论中说的那样,我只能在控制台时输出我的数据。记录我的数据?

这样可行,

   <script type="text/template" id="Template"> 
        <% _.each(MyXX, function(MyXX) { %>
           <%= console.log(MyXX.get('title')) %>
           <%= console.log(MyXX.get('path')) %>
           <%= console.log(MyXX.get('level')) %>
        <% }); %>
     </script>

但是当我这样做时,

   <script type="text/template" id="Template"> 
        <% _.each(MyXX, function(MyXX) { %>
          <div> <%= MyXX.get('title') %> </div>
          <div> <%= MyXX.get('path') %> </div>
          <div> <%= MyXX.get('level') %></div>
        <% }); %>
     </script>

我的BB代码中的课程中没有显示任何内容。

格伦。


我有一个使用PHP Slim的骨干设置,我已经在每个阶段提出了一些问题,现在或多或少都有大部分工作。

但我的下划线模板并没有做正确的事情。我可以访问第一个'结果',但是比这更深的东西会以未定义的形式返回?

这是我的模板文件,

  <script type="text/template" id="Template"> 
      <% _.each(MyCol, function(MyBB) { %>

      <%= console.log(MyCol.id) %>
      <%= console.log(MyCol.level) %>

      <% }); %>

  </script>

所以这样输出id形式的模型很好,但'level'或其他任何东西只是回归未定义?当我输出 console.log(MyCol) 所有模型都显示正常时,选择模型的属性标签,显示所有数据都被传递到我的模板中,那么我哪里出错?

这是加载到模板中的BackBone视图设置,

var MyView = Backbone.View.extend({

  el: '.page',
  render: function() {
      var that = this;
      var MyCol = new CollectionSetOne();

       MyMenu.fetch({
        success: function(MyCol) {
            var temp = _.template( $('#MenuTemplate').html(), {MyCol: MyCol.models} );
            that.$el.html(menutemp);
            //return this;
        }
      });

  }
}); 

那我哪里错了?

大部分内容来自YouTube上的Backbone.js教程,https://www.youtube.com/watch?v=FZSjvWtUxYk

欢迎大家帮忙,

格伦。

1 个答案:

答案 0 :(得分:3)

这里有几个问题。第一个是您指的是MyCol(您正在迭代的模型数组),您应该引用MyBB(特定模型):

<script type="text/template" id="Template"> 
    <% _.each(MyCol, function(MyBB) { %>
        Use MyBB in here, not MyCol...
    <% }); %>
</script>

下一个问题是Backbone模型属性与JavaScript对象属性相同。您将属性称为:

obj.property

但属性存储在model.attributes中,可以使用get访问:

obj.get('attribute')

id属性也存储在id property中,因此model.id将起作用。

您的模板看起来应该更像这样:

<script type="text/template" id="Template"> 
    <% _.each(MyCol, function(MyBB) { %>
        <% console.log(MyBB.id) %>
        <% console.log(MyBB.get('level')) %>
    <% }); %>
</script>

通常的约定(可能是您的混淆的来源)是调用toJSON来序列化视图的集合:

var tmpl = _.template($('#MenuTemplate').html());
var html = tmpl({ MyCol: MyCol.toJSON() });
that.$el.html(html);

然后模板中的MyCol将是一个简单的对象数组,您可以说:

<% console.log(MyBB.id) %>
<% console.log(MyBB.level) %>