tl; dr: ¿Cómo se implementa MVC en JavaScript de forma limpia?Modelo-Vista-Controlador en JavaScript
Estoy tratando de implementar MVC en JavaScript. He buscado en Google y reorganizado con mi código innumerables veces, pero no he encontrado una solución adecuada. (El código simplemente "no se siente bien").
Así es como lo estoy haciendo ahora mismo. Es increíblemente complicado y es un dolor trabajar con él (pero aún mejor que el montón de código que tenía antes). Tiene soluciones feos que derrotan el propósito de MVC.
Y he aquí, el desorden, si eres muy valiente:
// Create a "main model"
var main = Model0();
function Model0() {
// Create an associated view and store its methods in "view"
var view = View0();
// Create a submodel and pass it a function
// that will "subviewify" the submodel's view
var model1 = Model1(function (subview) {
view.subviewify(subview);
});
// Return model methods that can be used by
// the controller (the onchange handlers)
return {
'updateModel1': function (newValue) {
model1.update(newValue);
}
};
}
function Model1(makeSubView) {
var info = '';
// Make an associated view and attach the view
// to the parent view using the passed function
var view = View1();
makeSubView(view.__view); // Dirty dirty
// Return model methods that can be used by
// the parent model (and so the controller)
return {
'update': function (newValue) {
info = newValue;
// Notify the view of the new information
view.events.value(info);
}
};
}
function View0() {
var thing = document.getElementById('theDiv');
var input = document.getElementById('theInput');
// This is the "controller", bear with me
input.onchange = function() {
// Ugly, uses a global to contact the model
main.updateModel1(this.value);
};
return {
'events': {},
// Adds a subview to this view.
'subviewify': function (subview) {
thing.appendChild(subview);
}
};
}
// This is a subview.
function View1() {
var element = document.createElement('div');
return {
'events': {
// When the value changes this is
// called so the view can be updated
'value': function (newValue) {
element.innerHTML = newValue;
}
},
// ..Expose the DOM representation of the subview
// so it can be attached to a parent view
'__view': element
};
}
¿Cómo se puede implementar MVC en JavaScript de una manera más limpia? ¿Cómo puedo mejorar este sistema? ¿O es este el camino completamente equivocado, debería seguir otro patrón?
(cuatro años después) Utilice AngularJS. –
Si solo intentabas entender cómo funciona MVC en Javascript, entonces preguntar cómo implementarlo es perfectamente razonable. Demasiados desarrolladores utilizan marcos ahora sin entender realmente cómo funcionan. – NobodyReally