// entity/user.js
var User = Class('User', {
Base: Class.Serializable({
activity: Date
}),
Validate: {
activity (date) {
if (date.getFullYear() !== new Date().getFullYear())
return 'Current year expected';
}
},
_id: null,
activity: null,
points: 0,
});
// client/user.js
Class.patch('User', {
Store: Class.Remote('/rest/user/:_id')
})
// server/user.js
Class.patch('User', {
Store: Class.MongoStore.Single('users', {
indexes: [ { date: 1} ]
})
});
// Browser OR NodeJS
var user = new User({
_id: 'foo',
activity: new Date
});
user.save().done(() => {});
//
user
.patch({
$inc: {
points: 2
}
})
.done(() => {})
//
User.fetch({ _id: 'foo' }).done(user => {});
User.fetch({ points: '>10' }).done(user => {});
// Server, http endpoint sample
module.exports = atma.server.Service({
'$post /' (req) {
var user = new User(req.body),
error = Class.validate(user);
if (error)
return this.reject(error);
user.save().pipe(this);
}
})
var SuperModule = require('SuperModule');
var start_ = SuperModule.prototype.start;
SuperModule.prototype.start = function(cb){
var fn = onceDelegate(cb);
this
.once('started', fn)
.once('error', fn)
;
start_.call(this);
};
function onceDelegate(fn) {
return function(){
var x_ = fn;
fn = null;
x_ && x_.apply(null, arguments);
};
}
// ИЛИ, если сделать более общим:
function callbackInjector(Ctor, method, events) {
var orig_ = Ctor.prototype[method];
Ctor.prototype[method] = function(){
var args = Array.prototype.slice.call(arguments),
cb = args.pop(),
listener = onceDelegate(cb),
imax = events.length,
i = -1
;
while(++i < imax) this.once(events[i], listener);
return orig_.apply(this, args);
}
};
callbackInjector(SuperModule, 'start', ['started', 'error']);
document.body.insertAdjacentHTML('beforeend', '<iframe hidden />');
var originalWin = window.frames[window.frames.length - 1],
originalKeys = Object.keys(originalWin);
var globals = Object.keys(window).filter(x => originalKeys.indexOf(x) === -1);
function(...required_args, callback, ...optional_args)
, здесь несколько преимуществ: видно сразу опциональные аргументы и легче их парсить.var dict = {
91 : '17 850',
183 : '35 700'
};
var car$ = $('#franshuza-car-1').get(0),
after$ = $('#clean-money-after').get(0),
slider$ = $('#slider div').get(0);
$('body').mousemove(function () {
if (car$.style.visibility === 'hidden')
return;
after$.textContent = dict[ slider$.offsetWidth ] || '';
});