Как Метеор вспыхивает и Famo.us играют вместе?
2 Технологии:
- Метеор с двигателем пламени templating
- Famo.us с их потрясающей инфраструктурой gui
Я исхожу из метеорной стороны, мне лично нравится использовать {{усы}} (руля) для управления gui от данных, реактивный сеанс/база данных делает это действительно эффективным и интуитивно понятным.
Теперь появился famo.us и все его преимущества, но недостатком GUI на основе кода является то, что больше нет рулей...
- Какова нынешняя практика совместного использования обеих технологий?
- Они полностью диссоциативны?
- Использует механизм "наблюдать" / "Deps.autorun" повсюду, где элемент famo.us обновляется метеорным реактивным элементом?
Ответы
Ответ 1
Я только что выпустил предварительный просмотр famous-components, который является попыткой плотной интеграции между Blaze и Famous. Все другие подходы, которые я видел до сих пор, делают большую часть Blaze и требуют записи большого количества кода в JavaScript, что для меня было очень неестественным в Meteor. Код Метеор должен быть небольшим, кратким и легким с мощными результатами. Вот несколько примеров того, как это выглядит: (каждый шаблон формирует renderNode, любой HTML помещается на поверхность. Модификаторы/представления/параметры указаны как атрибуты компонента)
<template name="test">
{{#Surface size=reactiveSizeHelper}}
<p>hello there</p>
{{/Surface}}
{{#if loggedIn}}
{{>SequentialLayout template='userBar' direction="X"}}
{{else}}
{{>Surface template='pleaseLogIn' origin="[0.5,0.5]"}}
{{/if}}
</template>
Scrollview (можно разделить на под шаблоны):
<template name="famousInit">
{{#Scrollview size="[undefined,undefined]"}}
{{#famousEach items}}
{{#Surface size="[undefined,100]"}}{{name}}{{/Surface}}
{{/famousEach}}
{{/Scrollview}}
</template>
Template.famousInit.items = function() { return Items.find() };
События:
Template.blockSpring.events({
'click': function(event, tpl) {
var fview = FView.fromTemplate(tpl);
fview.modifier.setTransform(
Transform.translate(Math.random()*500,Math.random()*300),
springTransition
);
}
});
Он также работает с коробкой с железным маршрутизатором. Более подробная информация, документы, живые демонстрации, все в
http://famous-views.meteor.com/
Ответ 2
Вот презентация от Февральского 2014 года Devshop о интеграции Метеор с известными. Я не видел его через два месяца, но я отчетливо помню, как они отмечали, что да, вы используете шаблон Collection.observe.
Короче говоря, как и при использовании Реагировать или Three.js, знаменитый тупой к движку шаблонов Blaze. Он полностью обходит его и делает все элементы плоскими DOM. Прочитайте Отметьте ответ об этом.
Пакет, который использует API require.js, был представлен в Atmosphere несколько дней назад. Он назывался Famono.
Я успешно использовал его, чтобы подкрепить минималистическое доказательство концепции, observe
. Вы можете найти исходный код на Github, и я также развернул его с развертыванием метеоров.
Сам код очень прост. Коллекция:
// 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);
};
Ответ 3
Важно отметить, что поверхности в Famo.us - это просто divs, и вы можете подключать шаблоны Blaze непосредственно к поверхностям.
Zol на GitHub имеет код для таблицы лидеров Famous-Meteor
Ответ 4
В дополнение к ответу "Namal Goel": вот пример того, как сделать шаблон Meteor на знаменитую поверхность:
В файле .html
<template name="test">
This is rendered using Blaze template
</template>
Добавление шаблона в контекст:
var MeteorSurface = require('library/meteor/core/Surface');
var meteorTest = new MeteorSurface({
template: Template.test,
size: [200, 200]
})
aContext.add(meteorTest);
Ответ 5
Здесь ванильная реализация без использования библиотеки.
Создайте и очистите div для пламени, чтобы отобразить и передать это как содержимое вашей знаменитой поверхности. теперь у вас есть реактивный контент в знаменитом.
mainContext = famous.core.Engine.createContext();
div = document.createElement('div');
Blaze.render(Template.moo,div)
surface = new famous.core.Surface(
content: div,
size: [200, 200],
properties: {
backgroundColor: 'rgb(240, 238, 233)',
textAlign: 'center',
padding: '5px',
border: '2px solid rgb(210, 208, 203)',
marginTop: '50px',
marginLeft: '50px'
}
)
mainContext.add(surface)