这是 2014 年 2 月 Devshop 关于将Meteor 与 Famous集成的演示文稿。我已经两个月没见过了,但我清楚地记得他们提到是的,你利用了 Collection.observe模式。
简而言之,就像使用React或Three.js 一样,Famous 对 Blaze 模板引擎是迟钝的。它完全避开它,并将所有元素呈现为平面 DOM。阅读马克对此的回答。
几天前,一个利用 require.js API 的包被提交到 Atmosphere。它被称为法莫诺。
我已经成功地用它来掀起一个简约的概念证明,使用observe
. 你可以在 Github 上找到源代码,我也是用 meteor deploy 部署的。
代码本身非常简单。一个集合:
// collections/clicks.js
Clicks = new Meteor.Collection('clicks');
服务器上的一个小夹具来添加一个项目:
// server/fixtures.js
if (Clicks.find().count() === 0) {
Clicks.insert({ 'number': 0 });
}
和index.js
文件:
// client/index.js
UI.body.rendered = function() {
require("famous-polyfills"); // Add polyfills
require("famous/core/famous"); // Add the default css file
var Engine = require('famous/core/Engine');
var Surface = require('famous/core/Surface');
var Modifier = require('famous/core/Modifier');
var mainContext = Engine.createContext();
var containerModifier = new Modifier({
origin: [0.5, 0.5]
});
mainContext = mainContext.add(containerModifier);
var square = new Surface({
size: [200, 200],
properties: {
lineHeight: '200px',
textAlign: 'center',
background: 'rgba(200, 200, 200, 0.5)'
}
});
Clicks.find().observe({
added: function(clickCounter) {
// This is the way that you replace content in your surface.
// Injecting handlebars templates here will probably do nothing.
square.setContent(clickCounter.number);
},
changed: function(clickCounter) {
square.setContent(clickCounter.number);
}
});
square.on('click', function() {
// Hardcoded to work with only the first item in the collection.
// Like I said, minimal proof of concept.
var clickCounter = Clicks.findOne();
Clicks.update(clickCounter._id, { number: clickCounter.number + 1 });
});
mainContext.add(square);
};