1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
|
Screen
------
1 model
Liste de vues - vue active
def sélection de la vue
screen.model
screel.view
Parser_form
pour chaque form
cherche la vue
Pouvoir faire:
<field name="order_lines">
<form>
</form>
</field>
View (observater)
-----------------
view_widget
valeur par défaut
self.model_widget
self.view_form
view_form
self.model_form
Model (observateur)
-------------------
model_list
save
load
self.valid:
ok
model_form
validate
save
reload
model_field
set
set_client
get
get_client
Observater
----------
connect(nom signal, objet, **kwargs, *args2)
signal
============================================================================
Parent ou fils ?
Bon voila, j'ai dessiné une structure de classe ultra-basique de comment les
trucs devraient s'agencer dans le client (à mon avis).
Les specs:
- Un changement dans un modèle doit se voir dans toutes les vues qui lui
sont associées
- On doit pouvoir composer les vues facilement, autrement dit on doit
pouvoir mixer vue en arbre et vue en forme.
Comment je propose de le faire:
- MVC
- Un modèle quand il est mis à jour averti l'observateur qui à son tour
averti les vues qui surveille cet observateur.
- Une vue ou une mégavue, c'est la même interface : elles doivent donc être
interchangeable
- Une vue comprend deux objets: self.form et self.tree qui sont les deux
façons de la représenter dans le contexte définit par la mégavue.
J'hésite sur les objets observés: modèle ou mégamodèle ? Sur les modèles c'est
ma première idée car ils sont à la base des informations. Le problème c'est que
fait on quand il y a création/effacement ? Passer par un observateur sur le
mégamodèle ? C'est une solution, à la création/l'effacement le mégamodèle
change et passe alors un message, les vues qui le doivent l'interceptant.
Quel genre de messages sont envoyés via l'observateur:
- id de la ressource
- ressource (res.partner)
- champ (name, address_id)
Ainsi les vues savent si elles doivent agir ou pas, et poum un petit reload
fait l'affaire.
|