as3 MVC Uso de matrices como modelo Obtener/Establecer variables

Estoy relativamente familiarizado con el marco modelo-vista-controlador para actionscript 3. Solo he usado números y cadenas como variables en la clase modelo. Ahora estoy en un proyecto que es básicamente una sola clase desbordante. Debería haber usado mvc desde el principio, pero estoy en un nuevo trabajo donde algunas personas no conocen mvc, y bueno, sí, no importa demasiado porque ahora necesitamos usar mvc.

De todos modos, mi pregunta es si usa variables de matriz en la clase del modelo y tiene un getter/setter para estas variables de matriz, ¿qué cuenta como "establecer una matriz"?

Si tengo un evento de CAMBIO de envío para ese setter, ¿se activará cuando presione o desplace algo en la matriz? ¿Se llamará cuando empalme algo? ¿Se llamará cuando cambie una propiedad de un clip de película dentro de la matriz?

¡Gracias! ¡Juntos podemos modelar-ver-controlar el mundo!

preguntado el 15 de mayo de 13 a las 04:05

1 Respuestas

Buena pregunta. Supongamos que su código se parece a esto:

public function get dataArr():Array
{
   return _dataArr;
}

public function set dataArr(val:Array):void
{
   dispatchEvent(new Event(Event.CHANGE));
   _dataArr = val;
}

Ahora supongamos que tiene un objeto, digamos model que contiene estas funciones. Recuérdalo get y set Las funciones son básicamente azúcar sintáctica. Entonces, aunque algo parezca una asignación simple, sigue siendo una llamada de función.

// like calling some function model.setDataArr([1, 2, 3, 4, 5]);
// so event gets dispatched   
model.dataArr = [1, 2, 3, 4, 5];

// liek calling some function model.getDataArr().push(6);
// so setter never gets called and thus event is not dispatched.  
model.dataArr.push(6);

En resumen, cuando haces algo como shift or push o lo que sea, el evento no se enviará. model.dataArr usa la función get para devolver su matriz, y luego está llamando a métodos en esa matriz devuelta. Como nunca se llama a la función set, el evento nunca se envía.

Puede ver escenarios similares en toda la API de AS3. Tomar MostrarObjeto#transformar por ejemplo. Cuando acabas de hacer algo como dispObj.transform.matrix.tx += 10 la función de conjunto interno nunca se llama y no hay efecto. Así que tienes que asignar una nueva transformación dispObj.transform = someTransform para que se llame a la función set. Lo mismo se aplica a usted: debe asignar una matriz para que se llame a la función de configuración y se envíe su evento.

contestado el 15 de mayo de 13 a las 04:05

está bien. bueno, lo que quiero es básicamente que el evento se envíe cuando la matriz haya terminado de cambiarse. Entonces, supongamos que tiene algunos botones de clasificación para una página de inventario. El model.dataArr es lo que realmente se muestra en el escenario. La vista toma una entrada de clic y la envía al controlador. El controlador lo procesa y cambia las cosas en su propio _controllerDataArr o _tempDataArr local tal vez. Luego diga _model.dataArr = _tempDataArr Ahora dataArr es la matriz ordenada correctamente y envía un cambio para que la vista se actualice. ¿Es así como lo harías? - Jimothy

Eso debería funcionar, siempre y cuando estés haciendo _model.dataArr = someArray se llamará a la función set y se enviará el evento. - user1103976

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.