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 });