Server IP : 127.0.0.2 / Your IP : 3.19.237.16 Web Server : Apache/2.4.18 (Ubuntu) System : User : www-data ( ) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : disk_free_space,disk_total_space,diskfreespace,dl,exec,fpaththru,getmyuid,getmypid,highlight_file,ignore_user_abord,leak,listen,link,opcache_get_configuration,opcache_get_status,passthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,php_uname,phpinfo,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix,_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_ttyname,posix_uname,pclose,popen,proc_open,proc_close,proc_get_status,proc_nice,proc_terminate,shell_exec,source,show_source,system,virtual MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /opt/odoo/addons/web/doc/ |
Upload File : |
Guidelines and Recommendations ============================== Web Module Recommendations -------------------------- Identifiers (``id`` attribute) should be avoided '''''''''''''''''''''''''''''''''''''''''''''''' In generic applications and modules, ``@id`` limits the reusabily of components and tends to make code more brittle. Just about all the time, they can be replaced with nothing, with classes or with keeping a reference to a DOM node or a jQuery element around. .. note:: If it is *absolutely necessary* to have an ``@id`` (because a third-party library requires one and can't take a DOM element), it should be generated with `_.uniqueId <http://underscorejs.org/#uniqueId>`_ or some other similar method. Avoid predictable/common CSS class names '''''''''''''''''''''''''''''''''''''''' Class names such as "content" or "navigation" might match the desired meaning/semantics, but it is likely an other developer will have the same need, creating a naming conflict and unintended behavior. Generic class names should be prefixed with e.g. the name of the component they belong to (creating "informal" namespaces, much as in C or Objective-C) Global selectors should be avoided '''''''''''''''''''''''''''''''''' Because a component may be used several times in a single page (an example in OpenERP is dashboards), queries should be restricted to a given component's scope. Unfiltered selections such as ``$(selector)`` or ``document.querySelectorAll(selector)`` will generally lead to unintended or incorrect behavior. OpenERP Web's :js:class:`~openerp.web.Widget` has an attribute providing its DOM root :js:attr:`Widget.$el <openerp.web.Widget.$el>`, and a shortcut to select nodes directly :js:attr:`Widget.$ <openerp.web.Widget.$>`. More generally, never assume your components own or controls anything beyond its own personal DOM. Understand deferreds '''''''''''''''''''' Deferreds, promises, futures, … Known under many names, these objects are essential to and (in OpenERP Web) widely used for making :doc:`asynchronous javascript operations <async>` palatable and understandable. OpenERP Web guidelines ---------------------- * HTML templating/rendering should use :doc:`qweb` unless absolutely trivial. * All interactive components (components displaying information to the screen or intercepting DOM events) must inherit from :class:`~openerp.web.Widget` and correctly implement and use its API and lifecycle. * All css classes must be prefixed with *oe_* . * Asynchronous functions (functions which call :ref:`session.rpc <rpc_rpc>` directly or indirectly at the very least) *must* return deferreds, so that callers of overriders can correctly synchronize with them.