Нет ничего меньше, чем писать обычный ванильный javascript, это было бы моим советом.
И добавьте пару micro libraries для манипуляций с DOM и ajax, если вам нужно.
Вы хотите наблюдать за своими моделями, но привязка данных может быть тяжелой, магия стоит дорого. Почему бы просто не использовать библиотеку pub-sub для связи с модулями, которые изменили данные модели? Это просто, мало и безопасно.
Я приведу несколько примеров с чем-то, что я знаю, рамки soma.js. Он очень легкий, не имеет маршрутизатора (обычно я советую использовать director.js). Он обеспечивает инъекцию зависимостей, основанную на событиях систему наблюдателей, а также базовые ООП, такие как наследование. Он очень сфокусирован на предотвращении высокосвязного кода, поэтому модули поддерживаются и многократно используются. Ванильный javascript - это ключ, который является возможной инъекцией зависимости.
Забавно, кто-то думал, что я исхожу из .NET-фона с этой картой, возможно, он обращается к вам.
Для части ajax вырезайте jquery, так что есть только материал ajax (поэтому он маленький) или используйте что-то вроде reqwest.
Вот краткий обзор того, что вы можете сделать.
Inheritance
// create "super class"
var Person = function(name) {
this.name = name;
};
Person.prototype.say = function() {
console.log("I'm a Person, my name is:", this.name);
}
// create "child class" that will inherit from its parent
var Man = function(name) {
Person.call(this, name); // call super constructor
}
Man.prototype.say = function() {
// Person.prototype.say.call(this); // call super say method
console.log("I'm a Man, my name is:", this.name);
}
// apply inheritance
soma.inherit(Person, Man.prototype);
// create Person
var person = new Person("Doe");
person.say();
// create Man
var john = new Man("John Doe");
john.say();
Try it out
Вот еще один пример с некоторыми ярлыками.
// create "super class"
var Person = function(name) {
this.name = name;
};
Person.prototype.say = function() {
console.log("I'm a Person, my name is:", this.name);
}
// create an "extend" shortcut
Person.extend = function (obj) {
return soma.inherit(Person, obj);
};
// create "child class" and apply inheritance using an "extend" shortcut
var Man = Person.extend({
constructor: function(name) {
Person.call(this, name); // call super constructor
},
say: function() {
// Person.prototype.say.call(this); // call super say method
console.log("I'm a Man, my name is:", this.name);
}
});
// create Person
var person = new Person("Doe");
person.say();
// create Man
var john = new Man("John Doe");
john.say();
Try it out
Модули
рамочные делает вас в состоянии ваниль Javascript, поэтому очень многоразовые.
Вот что модель, или модуль, или что-нибудь еще может выглядеть следующим образом (ваниль Javascript):
(function(clock) {
'use strict';
var TimerModel = function() {
};
TimerModel.prototype.update = function() {
// update something
};
TimerModel.prototype.add = function(callback) {
// add something
};
TimerModel.prototype.remove = function(callback) {
// remove something
};
TimerModel.prototype.dispose = function() {
// destroy model
};
clock.TimerModel = TimerModel;
})(window.clock = window.clock || {});
Dependency injection
Структура обеспечивает инъекции зависимостей, что делает вас в состоянии использовать с именем переменной чтобы получить ваши экземпляры в других модулях.
Правило инъекции может выглядеть так:
injector.mapClass("myModel", Model);
Чтобы получить модель где-то еще, просто использовать «именованные», форсунка будет заботиться обо всем (и очень хорошо, чтобы решить вложенные зависимости) :
var Module = function(myModel) {
// myModel has been injected
}
Try an example
More information
Communication (pub-sub, Observer Pattern)
Инструмент, основанный на событиях (взаимозаменяемый с узлом DOM для высокой развязки), доступен для связи: диспетчер. Вы также можете получить его с инъекцией:
var Module = function(myModel, dispatcher) {
// myModel and dispatcher have been injected
}
Отправка события:
this.dispatcher.dispatch('do-something');
Слушайте события:
dispatcher.addEventListener('do-something', function(event) {
// react to an event
});
Template
Вы можете использовать очень мощный плагин, как механизм шаблонов (настоящая неразрушающая манипуляция с DOM), называемая soma-template.
Или любой другой шаблон двигателя по вашему выбору.
Построить приложение
Вот статья, которая сделает вас построить масштабируемую и ремонтопригодны приложения: http://flippinawesome.org/2013/07/15/soma-js-your-way-out-of-chaotic-javascript/
Это не так, рамки также обеспечивают Mediators и Commands, чтобы сделать код для повторного использования. Check out the site, он имеет tons of demos.
Я надеюсь, что все это поможет вам.
Я привык писать очень голое приложение, которое быстро запускается на мобильных устройствах, поэтому, пожалуйста, задайте мне точные вопросы о том, что вам нужно, чтобы я мог помочь.
Romu
Большое спасибо за подробный ответ !! Определенно мне нужно присмотреться к сомахам, это действительно похоже на то, что мне нужно. Мне уже нравится функция DI, но как somajs решает проблему «минимизации»? Если у меня будет что-то вроде injector.mapClass («config», Config); var Model = function (config) {}; и затем будет минимизировать JS-файл, поэтому имена переменных будут меняться на более короткие ... как тогда somajs все еще смогут вводить зависимости? Во всяком случае, я потратил 5 минут на сайт somajs, чтобы посмотреть, что он может, и мне это очень нравится !! Сколько лет этой структуре? Есть ли у него большое сообщество? –
Мини-код - это то, о чем вы должны заботиться о DI. Вам нужно посмотреть на что-то под названием Mangle. Если вы используете uglify, вот начало ответа: https://groups.google.com/forum/#!topic/somajs/twPrU9_wLhQ Я обычно выключаю mangle, чтобы он не мешал во время разработки, и позже я добавляю список исключений для оптимизации. Кто-то отметил, что вы можете уйти с чем-то вроде: this ['model'] = null; но мне это не очень нравится, я предпочитаю управлять именами инъекций с помощью mangle. – Soundstep
Рамка совершенно новая, поэтому на данный момент сообщество мало, но, похоже, привлекает людей. Особенно разработчики заботятся о зависимостях и/или других языках в качестве фона. Я пытаюсь сделать себя доступным, и я рад помочь на доске, если вам что-то нужно: https://groups.google.com/forum/#!topic/somajs – Soundstep