Skip to content

Instantly share code, notes, and snippets.

@jorgesanabria
Last active February 15, 2017 11:16
Show Gist options
  • Save jorgesanabria/fa1003d69ac6f82b686a71e6e51c5c4a to your computer and use it in GitHub Desktop.
Save jorgesanabria/fa1003d69ac6f82b686a71e6e51c5c4a to your computer and use it in GitHub Desktop.
controller plugin for jquery
<!DOCTYPE html>
<html>
<head>
<title>Plugin Controller</title>
</head>
<body>
<div id="app">
<button data-click="saludar">Hola</button>
<p id="saludo"></p>
<div data-partial="componente">
<div id="app2">
<input type="text" name="nombre"/>
</div>
</div>
</div>
<script type="text/javascript" src="jquery-3.1.1.min.js"></script>
<script type="text/javascript">
(function ($) {
$.fn.controller = function (controller, events) {
var defaultsEvents = {click: "click", dblclick: "dblclick", mouseover: "mouseover"};
var listened = $.extend(defaultsEvents, events);
if (!controller || typeof controller != "function")
return this.first().data("controller");
if (typeof controller == "function") {
var cnt = new controller();
this.each(function(){
var self = this;
$(self).data("controller", cnt);
$(self).data("controller").selector = function (selector) {
return $(self).find(selector);
};
var partialProvider = function(context) {
return $(context).find(":first-child").data("controller");
};
$(self).data("controller").partial = {};
$(self).find("*[data-partial]").each(function () {
var partialElement = this;
var partialName = $(partialElement).data("partial");
$(self).data("controller").partial[partialName] = function() {
return partialProvider(partialElement);
};
});
$.each(listened, function (key, value) {
var eventSelector = "*[data-:on:]".replace(":on:", key);
$(self).off(value).on(value, eventSelector, function(ev) {
var action = $(self).find(eventSelector).data(key);
($(self).controller()[action])(ev);
});
});
});
if ($(this).data("controller").hasOwnProperty("init")) $(this).data("controller").init();
}
};
})(jQuery);
</script>
<script type="text/javascript">
$("#app").controller(function() {
var self = this;
self.saludar = function () {
var texto = self.partial.componente().leerNombre();
self.selector("#saludo").html(texto);
};
self.init = function() {
console.log("hola desde el init!");
};
});
$("#app2").controller(function() {
var self = this;
self.leerNombre = function () {
return self.selector("input[name=nombre]").val();
};
});
</script>
</body>
</html>
(function ($) {
$.fn.controller = function (controller, events) {
var defaultsEvents = {click: "click", dblclick: "dblclick", mouseover: "mouseover"};
var listened = $.extend(defaultsEvents, events);
if (!controller || typeof controller != "function")
return this.first().data("controller");
if (typeof controller == "function") {
var cnt = new controller();
this.each(function(){
var self = this;
$(self).data("controller", cnt);
$(self).data("controller").selector = function (selector) {
return $(self).find(selector);
};
var partialProvider = function(context) {
return $(context).find(":first-child").data("controller");
};
$(self).data("controller").partial = {};
$(self).find("*[data-partial]").each(function () {
var partialElement = this;
var partialName = $(partialElement).data("partial");
$(self).data("controller").partial[partialName] = function() {
return partialProvider(partialElement);
};
});
$.each(listened, function (key, value) {
var eventSelector = "*[data-:on:]".replace(":on:", key);
$(self).off(value).on(value, eventSelector, function(ev) {
var action = $(self).find(eventSelector).data(key);
($(self).controller()[action])(ev);
});
});
});
if ($(this).data("controller").hasOwnProperty("init")) $(this).data("controller").init();
}
};
})(jQuery);
@jorgesanabria
Copy link
Author

Escuchar un evento de un partial hijo:
$("#padre").controller(function(){
var self = this;
self.guardarEmpleado = function() {
//hacer algo
};
}, {empleadoSeteado: "projectname.área.partial.empleadoseteado"});

En el html definimos el listener directamente en el marcado:

@Html.Partial("path/to/partial")

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment