JSSDK. config, Emitter, Promise, request.
// Создаем локальный конфиг
var cfg = config({
foo: true,
bar: false,
num: 7
});
// Либо используем глобальный
config.set("flag", true);
cfg.is("foo"); // true
cfg.is("bar"); // false
#! cfg.is("!bar"); // true
#! cfg.is("bar num:7"); // true, num == 7
#! cfg.is("num:5:10"); // true, т.к. num >= 5 && num <= 10
cfg.get("user"); // [object Object]
#! cfg.get("user.name"); // "RubaXa"
#! cfg.get("user.phones"); // [Array]
#! cfg.get("user.phones.0") // { id: 1, number: ... }
#! cfg.get("user.phones.0.number") // 79666361666
#! cfg.get("foo[bar].baz['qux'].123['zzz'].wow", "lol"); // "lol"
cfg.set("foo", "bar");
#! cfg.set("user.name", "RubaXa");
#! cfg.set("user.phones[0].number", "..");
#!+ cfg.set({
"user.name": "Konstantin",
"user.email": "k.lebedev@corp.mail.ru",
#!- });
cfg.unset("foo");
#!+ cfg.unset(
"user.name",
"unset.phone[0].number",
"unset.phone[1]"
#!- );
Emitter.apply(myObj); // или var emitter = new Emitter;
#! myObj.on("foo bar", function (a, b){ console.log(a, b); });
#! myObj.emit("foo", 123); // 123, undefined
#! myObj.emit("bar", [4, 5]); // 4, 5
#!+
myObj.onBaz = function (val){ console.log(val+"!"); };
#!- myObj.emit("baz", "ok"); // ok!
emitter.on("auth", function (evt, arg) {
#!+ if (!evt.isDefaultPrevented()) {
evt.preventDefault();
console.log(evt.type, evt.details, arg);
#!- }
});
#!+ emitter.trigger({ type: "auth", details: 123 }, "bar");
#!- // "auth", 123, "bar"
var ctrl = {
handleEvent: function () {
// some code
}
};
#! emitter.on("foo", ctrl);
Это не только polyfill, но и полноценная замена jQuery.Deferred.
var promise = new Promise(function (resolve, reject) {
// some code
resolve(tue);
});
#!+ promise.always(function (state) {
console.log(state);
#!- });
Это не только polyfill, но и полноценная замена jQuery.Deferred.
function delay(ms) {
var dfd = Promise(); // jQuery-style
setTimeout(function () {
dfd.resolve();
}, ms);
return dfd.promise();
}
request.get("path/to")
#!+ .always(function (req/**request.Request*/) {
if (req.isOK()) {
#!+ // Резльтат ответа сервера
#!- console.log(req.body);
}
#!- })
;
request.get("path/to").done(function (xhr) {
var body = xhr.body; // ответ сервера
if (body.user && body.user.id) {
// some code
}
});
request.get("path/to").done(function (xhr) {
var userId = xhr.get("body.user.id");
if (userId) {
// some code
}
});
request.on("error", function (evt, xhr) {
#!+ if (xhr.is("status:401")) { // нужна авториция
#!+ return xhr.retry(function () {
return request.post("auth/user");
#!- });
#!- }
});
request.post("path/to").always(function (xhr) {
// some code
});
request.on("error", function (evt, xhr) {
#!+ if (xhr.is("status:503 status:504")) {
#!+ return xhr.retry(function (resolve, reject) {
#!+ // на xhr.retry есть ограничения
#!- setTimeout(resolve, 7000);
#!- });
#!- }
});
request.on("error", function (evt, xhr) {
if (xhr.is("status:503:504")) {
return xhr.retry(function (resolve, reject) {
// на xhr.retry есть ограничения
setTimeout(resolve, 7000);
});
}
});
request.mock({
url: "path/to",
type: "post",
responseText: ".."
});
#! request.mock.one({ url: "path/to", status: 500 });
#! request.mock.one({ url: "path/to", status: 200 });