【问题标题】:My Backbone / Underscore template issue?我的骨干网/下划线模板问题?
【发布时间】:2014-04-06 09:50:07
【问题描述】:

好的,我已经发布了一些关于此的问题,并且大部分都可以正常工作,但我不确定我正在做的事情,所以我认为将我的问题发布在一个新问题中会更容易和更清晰,以及我的代码的完整副本。

所以我的目标是,我的数据库中有我的菜单、菜单标题、路径和一个以 id 字段作为主键的级别。然后我有一个 PHP 类,它在列表中的“导航”标签中构建它。这一切都没有任何问题。现在将级别设置为从 1 到 5,并且 select SQL 命令通过按该级别排序来构建菜单。

为此考虑的目标是让一个表单保存所有这些数据,然后使用 HTML5 拖放并能够更改数据库中设置的级别。

所以我目前要做的是让 BackBone 将该数据加载到下划线模板中。这是我遇到一些问题的地方。

所以我的 BackBone 代码,

var AdminColModel = Backbone.Collection.extend({
     url: '/GetMenu'
});

var AdminEditMenu = Backbone.View.extend({
el: '.page',
render: function() {
    var that = this;
    var MyMenu = new AdminColModel();

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

}
}); 

$(document).ready(function(){  
   var MyMenu = new AdminEditMenu();
   MyMenu.render();  
});

Path /GetMenu 返回,我这里是用PHP Slim来做这个的,菜单数据库信息是JSON格式的。

这是我的下划线代码,

<script type="text/template" id="MenuTemplate"> 

   <% _.each(MyMenu, function(MyMenu) { %>

        <%= $('.page').append(MyMenu.id) %>
        <%= $('.page').append(MyMenu.title) %>
        <%= $('.page').append(MyMenu.path) %>
    <%= $('.page').append(MyMenu.level) %>
    <%= $('.page').append('<br/><br/>') %>

   <% }); %>

</script>

现在我的 BackBone 指向一个“.page”类,我在这个模板代码上方的 div 标记中回显它,因此,据我所知,该类在模板之前的 DOM 中,我认为是对。

我还使用 Grunt 来缩小我的所有主干/JQuery 代码,这些代码在我关闭我的 body 标签之前加载。

现在这确实有效,但是从我观看的一个 youtube 视频中,这个人只是在下划线模板内的表格中编码,然后加载。如果我在模板中加载任何内容,但不会显示,我添加到我的 JSON 数据中的 JQuery .appends 是我发现我可以将该数据打印/回显到我的页面中的唯一方法。我认为这是不对的,我知道我一定做错了什么。

我没有发布我的任何 PHP 代码,因为我认为不需要它,这一切正常,我的代码的那一面似乎没有任何问题。

欢迎所有帮助或 cmets。

格伦。

【问题讨论】:

  • 附注:将that.$el.html(that.menutemp ); 更改为that.$el.html( menutemp );。由于menutemp 是一个局部变量,因此that 不是必需的。
  • 谢谢,会这样做的。格伦
  • 通常&lt;%= $('.page').append(MyMenu.id) %&gt; 会更像&lt;%= MyMenu.id %&gt;,然后模板会生成一大块文本/html,视图会在页面中的某个地方折腾。
  • @mu-is-too-short - 这是我的问题,如果我只执行 ,它根本不会显示任何内容。我放在那里的东西没有什么区别,它不会显示/渲染任何东西。我尝试了“div”标签、表格、部分标签,但没有显示任何内容。难道我做错了什么?或者我在做什么好吗?谢谢格伦
  • 没关系,我让它工作了。当我按照 Zain 所说的去做时,它奏效了。 @zain-shaikh,如果您将其作为答案发布,我接受。谢谢格伦。

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


【解决方案1】:

将that.$el.html(that.menutemp ); 更改为that.$el.html( menutemp );。

由于menutemp 是一个局部变量,因此that 不是必需的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多