LocalMarket Code Review - maodouio/meteor-lean-startup-camp GitHub Wiki
LocalMarket Code Review
内容纲要
- Code Analysis 代码分析
- Data Design 数据设计
- Work Flow 运转流程
- Template Appliance 模版应用
Code Analysis 代码分析
Code Download
- git clone https://github.com/kevingzhang/localmarket
- meteor create --example localmarket
- Demo at http://localmarket.meteor.com
Code Tree
li@MacbookAir ~/Github/localmarket$ tree -L 2
.
├── README.md
├── client
│ ├── head.html
│ ├── helpers.js
│ ├── init.js
│ ├── lib
│ ├── stylesheets
│ └── templates
├── cordova-build-override
│ └── platforms
├── lib
│ ├── activities.js
│ ├── bookmarks.js
│ ├── news.js
│ ├── recipes-data.js
│ └── router.js
├── mobile-config.js
├── packages
│ └── request
├── public
│ ├── apple-touch-icon-precomposed.png
│ ├── favicon.png
│ ├── font
│ ├── icon
│ └── img
├── resources
│ ├── icons
│ └── splash
└── server
├── _settings.js
├── publications.js
└── users.js
17 directories, 15 files
Homepage Files
- client/templates/app-body.html
- client/templates/home.html
- client/templates/home.js
- lib/router.js
Homepage Items
1 News
{{latestNews.text}}
- client/templates/home.js
- News.latest();
News.latest = function() {
return News.findOne({}, {sort: {date: -1}, limit: 1});
}
- lib/news.js
- News = new Mongo.Collection('news');
2 What's Cooking
{{#each activities}}
- client/templates/home.js
- Activities.latest();
Activities.latest = function() {
return Activities.find({}, {sort: {date: -1}, limit: 1});
}
- server/publications.js
- Meteor.publish('latestActivity')
- lib/router.js
- HomeController
- Meteor.subscribe('latestActivity')
3 Our Recipes
{{#each featuredRecipes}}
featuredRecipes: function() {
var recipes = _.values(RecipesData);
var selection = [];
for (var i = 0;i < FEATURED_COUNT;i++)
selection.push(recipes.splice(_.random(recipes.length - 1), 1)[0]);
return selection;
},
- lib/recipes-data.js
- RecipesData 大数组
4 Bookmarks
- lib/router.js
BookmarksController = RouteController.extend({
onBeforeAction: function() {
if (Meteor.user())
Meteor.subscribe('bookmarks');
else
Overlay.open('authOverlay');
},
data: function() {
if (Meteor.user())
return _.values(_.pick(RecipesData, Meteor.user().bookmarkedRecipeNames));
}
});
- server/publications.js
Meteor.publish('bookmarkCounts', function() {
return BookmarkCounts.find();
});
1 What's Cooking
- HTML View
- client/templates/whats-cooking.html
- activities
- Data Model
- lib/activities.js
2 Our Recipes
- HTML View
- client/templates/recipes.html
- client/templates/recipe-item.html
- Data Model
- lib/recipes-data.js
3 News
- HTML View
- client/templates/admin.html
- Data Model
- lib/news.js
News = new Mongo.Collection('news');
4 Bookmarks
- HTML View
- client/templates/bookmarks.html
- Data Model
- lib/bookmarks.js
BookmarkCounts = new Meteor.Collection('bookmarkCounts');
resources
splash app启动加载图片
- resources/splash/
icons app使用icon
- resources/icons/
public
- img
- icon
lib
- routes.js
- reciptes-data.js
- activities.js
- bookmarks.js
Data Design 数据设计
- RecipesData
- Activities
- News
- BookmarkCounts
Work Flow 运转流程
- Html -> Template
- Event -> js
- Router -> data
Template Appliance 模版应用
- users
- 网站注册用户
- recipes
- 用户中内容的生产者,制造出的内容
- activities
- 用户中内容的消费者,对内容的消费记录,可以是多次消费
- bookmarks
- 用户对内容的关注,点赞,收藏,只能是一次
- news
- 系统对所有用户的通知,也可以是未来的广告模型
- notifications
- 系统对个别用户的个别提醒,可以用于用户订阅内容的更新提醒