Buena noche, en un hilo anterior tengo el mismo problema, pero no lo he podido solucionar y es pasar los datos de un filtro a js, para ser aplicado en formulas:
guardo los datos en php con toba_js
function evt__filtro__filtrar($datos) {
if (array_no_nulo($datos)) {
$this->s__datos_filtro = $datos;
toba_js::arreglo($datos); //guardo para llevar a js
} else {
toba::notificacion()->agregar(‘El filtro no posee valores’);
}
}
en js capturo y trato de recuperarlo
class extension_proyeccion extends toba_ei_formulario_ml {
function extender_objeto_js() {
echo "var mi_arreglo_js = " . toba_js::arreglo($arreglo);
echo "
{$this->objeto_js}.evt__cuota_extra__procesar = function(es_inicial, fila) {
alert ('plazo ’ + mi_arreglo_js[‘plazo’]); //muestra que plazo es undefined
}
";
}
}
Estoy haciendo algo mal, en el punto uno cuando guardo en php o en el momento de recuperar ?
mi_arreglo_js [0]
mi_arreglo_js [‘plazo’]
mi_arreglo_js.length muestra cero, es decir, que no trae elementos el arreglo.
con ninguno es valido
Ahi no estas guardando nada ya que el resultado de la funcion no queda en ningun lado, tampoco tendria sentido que lo guardes ahi ya que dicha funcion esta pensada para devolver un string que se pasa directamente a la salida JS.
2. en js capturo y trato de recuperarlo
class extension_proyeccion extends toba_ei_formulario_ml {
function extender_objeto_js() {
echo "var mi_arreglo_js = " . toba_js::arreglo($arreglo);
echo "
{$this->objeto_js}.evt__cuota_extra__procesar = function(es_inicial, fila) {
alert ('plazo ' + mi_arreglo_js['plazo']); //muestra que plazo es undefined
}
";
}
}
De donde saldria el valor para $arreglo?.. porque no veo ninguna llamada a funcion para recuperar el valor y estas en una clase totalmente distinta, por lo cual tenes que recuperar dichos valores de alguna manera.
Saludos
Los datos que necesito se encuentran en el filtro, si no es como lo intento guardar, como se llena el toba_js, al momento del activar método filtrar del filtro ?
Trato de recuperar , en la extención del forumlario ML donde requiero de dichos datos, utilizando el llamado del toba_js
echo "var mi_arreglo_js = " . toba_js::arreglo($arreglo);
y luego los elementos del array con mi_arreglo_js[0], mi_arreglo_js[1]…
Como nunca lo he hecho y no hay ejemplos a la vista, disculpame si estoy perdido.
Estimado Jhon.
La verdad es que no se exactamente como es la interfase que estás queriendo diseñar.
En el caso de que fuera una pantalla con un formularo que muestra resultados en función del filtro, yo intentaría lo siguiente:
Dado que cuando clickeas sobre el botón [filtrar] se produce una petición al servidor, se ejecutará el código del evento y los eventos de configuración del filtro y del formulario.
Atendiendo este comportamiento, es posible definir una propiedad en la clase del CI en cuestión, que guarde lo cargado en el filtro, por ejemplo:
protected $s__datos_filtro = null;
y cargarla con el contenido del mismo al disparar el evento filtrar (en php)
$this->s__datos_filtro = $datos;
(Generalmente, lo cargado en el filtro viene en un array con ese nombre)
Al ejecutarse la configuración del filtro, es posible cargarle esos datos:
$filtro->get_datos($this->s__datos_filtro);
En este punto, ya tenemos la información de nuevo en el cliente, por lo tanto, es posible tomarla desde el JS y utilizarla en cálculos.
No se si te acerqué a la solución, o te enredé más.
La primera parte es clara, de como guardar y recuperar los datos del filtro en el servidor; lo que me falta es en JS que es una extensión de un formulario ML, como recupero lo guardado y como hago referencia al arreglo, ya que no lo puedo hacer con $filtro->get_datos($this->s__datos_filtro);
El caso concreto es en el filtro tengo los datos de un credito (plazo e interes), genero en el ML n filas de acuerdo al plazo, pero en cuaquier fila del ML, puedo realizar un pago extra, lo cual obliga a recalcular en el cliente la filas siguientes, para lo cual necesito los datos del filtro nuevamente, pero que no estan en el ML.
Tambien he tratado de llegar al filtro por js, pero no me arroja resultados con
var valor = this.dep(‘ci’).dep(‘filtro’).ef(‘nteres’).get_estado();
var valor = this.controlador().dep(‘filtro’).get_datos();
Creo que tu lo sabes y te agreadecería que me completaras la respuesta.
Veo que andas mas perdido que Adan en el dia de la madre, dos cosas:
1.- Recorda que tenes el codigo fuente de toba a mano, si tenes alguna duda sobre lo que hace una funcion internamente podes ir a fijarte.
La funcion que estas invocando meramente toma el parametro y si es un arreglo, lo convierte a un string que lo representa en JS.
Pero para ello, la variable $arreglo tiene que tener un valor… osea, es un metodo push… .no recupera nada.
2.- Vos estas en una subclase de un formulario ML… pero la clase que tiene los valores del filtro es la perteneciente al CI,
los valores ya estan en el servidor, solo que en otro objeto.
Tambien he tratado de llegar al filtro por js, pero no me arroja resultados con
var valor = this.dep('ci').dep('filtro').ef('nteres').get_estado();
var valor = this.controlador().dep('filtro').get_datos();
Ahora, desde el lado del cliente. Recorda que la misma estructura de arbol que tiene la operacion en PHP, se mantiene en JS... por lo tanto, las llamadas que estas haciendo ahi solo se pueden realizar desde un punto especifico del arbol, de lo contrario no devolveran nada.
Mi consejo, toma el arbol de la operacion que aparece en el editor… intenta posicionarte dentro del objeto que contiene este JS y luego fijate como harias en PHP para obtener lo que queres.
Eso traducilo a JS y vas a tener los datos.
Estas perdido, porque se te esta mezclando el lugar en el cual estas parado, ya has hecho cosas mucho mas complicadas que esta.
Separa bien todos los objetos que integran la operacion, anda parandote en cada uno e intentando ver como accedes desde ahi a los datos del otro (tanto en PHP como en JS), vas a ver que te das cuenta del error.