javascript - 我的 Underscore 模板没有加载/显示所有模型数据,但可以访问它吗?

标签 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 View 设置,

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

欢迎大家的帮助,

格伦。

最佳答案

这里有几个问题。首先是您指的是 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为 View 序列化集合:

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

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

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

关于javascript - 我的 Underscore 模板没有加载/显示所有模型数据,但可以访问它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22866492/

相关文章:

javascript - $.each 内的异步错误处理

javascript - 捕获由通过 jQuery.load() 加载的错误 JS 引起的语法错误

javascript - Highcharts 在 x 轴上多次显示额外标签

javascript - 无法读取未定义的属性 'toJSON'

javascript - 下划线js模板中的循环

javascript - 如何阻止 form.submit() 将我重定向到另一个页面?

javascript - Jquery Jplayer 动态播放列表

javascript - 根据选中的复选框显示/隐藏部分

javascript - 如何在节点js中获取日期中的日期名称

backbone.js - 在 Brunch 中更改手写笔文件的串联顺序