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