我是backbone.js 和express 的新手,我一直在为我自己的项目改编Christophe Coenraets Wine Cellar REST API 示例应用程序。
我正在构建一个表单,该表单需要从 mongodb 中的多个不相关集合中填充多个菜单。
我可以用一个集合填充一个菜单,但我不知道如何将多个集合添加到我的表单视图中。
这是我用来填充一个菜单的文件。如何扩展它以填充两个菜单?
我想我可以为我想要填充的每个菜单创建一个新视图——但这似乎有点矫枉过正。
我可以将两个 mongodb find() 集合合并到一个对象中,并在页面上分别列出它们吗?如果是这样,怎么做?
提前致谢!
/routes/modules.js 包含:
出口.findAllModules = 功能(请求,RES){
db.collection('modules', function(err, collection) { collection.find().toArray(function(err, items) { res.send(items); }); });
};
/server.js 包含:
app.get('/modules', module.findAllModules);
/public/js/main.js 包含:
路线:{
“模块”:“列表”}
...
列表:功能(页面){
var p = page ? parseInt(page, 10) : 1; var moduleList = new ModuleCollection(); moduleList.fetch({success: function(){ console.log('in list function'); $("#content").html(new ModuleListView({model: moduleList, page: p}).el); }}); this.headerView.selectMenuItem('home-menu'); },
...
utils.loadTemplate([
'ModuleListItemView' ], function() { app = new AppRouter(); Backbone.history.start(); });
/public/models/models.js 包含:
window.Module = Backbone.Model.extend({
urlRoot: "/modules", idAttribute: "_id", initialize: function () { this.validators = {}; this.validators.name = function (value) { return value.length > 0 ? {isValid: true} : {isValid: false, message: "You must enter a name"}; }; validateItem: function (key) { return (this.validators[key]) ? this.validators[key](this.get(key)) : {isValid: true}; }, validateAll: function () { var messages = {}; for (var key in this.validators) { if(this.validators.hasOwnProperty(key)) { var check = this.validators[key](this.get(key)); if (check.isValid === false) { messages[key] = check.message; } } } return _.size(messages) > 0 ? {isValid: false, messages: messages} : {isValid: true}; }, defaults: { _id: null, name: "" } });
window.ModuleCollection = Backbone.Collection.extend({
model: Module, url: "/modules"
});
/public/js/views/modulelist.js 包含:
window.ModuleListView = Backbone.View.extend({
initialize: function () { this.render(); }, render: function () { var modules = this.model.models; $(this.el).html('<ul class="thumbnails"></ul>'); for (var i = 0; i < modules.length; i++) { $('.thumbnails', this.el).append(new ModuleListItemView({model: modules[i]}).render().el); } return this; } });
window.ModuleListItemView = Backbone.View.extend({
tagName: "li", initialize: function () { this.model.bind("change", this.render, this); this.model.bind("destroy", this.close, this); }, render: function () { $(this.el).html(this.template(this.model.toJSON())); return this; } });
/public/tpl/ModuleListView.html 包含: