【odoo 10.0】widget開發及Qweb基本使用

參考文檔

Building Interface Extensions — odoo 10.0 documentation odoo官網的開發文檔

widget視圖

  • 目前寫的是非field標簽屬性widget
  • 主要是熟悉下odoo前端widget的基本使用
  • 根據官方文檔的例子實現的widget未知原因一直不能成功運行,有人知道原因咩
  • 使用的是odoo.define聲明的方式

準備階段

當前目錄結構如圖:

目錄結構

主要代碼在js文件中,src-xml內文件主要存放qweb模板

  • 首先把自己創建的xml文件都在manifest中聲明好,qweb模板單獨聲明
manifest
  • 將js,css文件加載到odoo中

<template id="assets_backend" name="demo_assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<link rel="stylesheet" href="/demo/static/src/css/demo.css"/>
<script type="text/javascript" src="/demo/static/src/js/demo.js"/>
</xpath>
</template>

  • 頁面調用widget視圖,在ir.actions.client中聲明一個action,tag標簽綁定widget注冊成action的名字,然后與菜單中的action綁定


<record id="action_home_page" model="ir.actions.client">
<field name="name">demo home</field>
<field name="tag">demo_home_page</field>
</record>

創建一個widget

  • widget主要開發都在js文件中
  • 開始按照官方文檔介紹的方法創建widget
    以odoo.模塊名=function的方式聲明本模塊的作用域
    函數參數有兩個:
    instance:odoo web的當前實例 local:聲明當前模塊下的變量或方法
    odoo提供了一個虛擬class的實現,創建class可以通過instance.web.Class.extend方式。
    創建widget也需要繼承widget類,最后需要在web client的事件中注冊,在頁面才能調用。
    但是按照文檔描述注冊widget,頁面點擊觸發,一直提示找不到這個action。
    不知道是寫錯了,還是10的前端有變化。通過查看源碼,發現可以使用新的define方式聲明。


    不成功代碼
  • 下面主要介紹新的聲明方式創建widget
    這種寫法更適用于模塊化前端編程,使用require.js進行前端開發的會比較熟悉
    首先通過odoo.define("namespaceName",function(require){});聲明當前作用域適用范圍
    然后通過require引入要使用的js模塊。
    例如:

var core = require('web.core');
var Model = require('web.Model');
var Widget = require('web.Widget');
var data = require('web.data');

下面就可以通過繼承創建一個widget了
繼承于odoo-10.0/addons/web/static/src/js/framework/widget.js
具體可以重寫的方法屬性,可以找到上面的js文件參照
主要屬性有className-widget創建的dom元素class,events-widget的事件表,template-widget的qweb模板
主要方法有init-初始化實例方法,start-widget自動調用方法

widget

最后在注冊一下wdget,頁面中才能調用

registry

這樣一個基礎的widget頁面就可以使用了
會在頁面中顯示
一個div .calss=oe_demo_homepage 內容為homepage widget

qweb模板的使用

短暫接觸odoo來看,目前前端頁面都是通過qweb來動態渲染界面的,qweb擁有自己的特有的模板標簽<t></t>,通過該標簽可以做到使用widget/controllers傳遞的變量值(感覺和java的jsp差不多呀-。-)

  • 與widget結合,簡單使用模板
    記錄下在widget中使用qweb模板。很簡單,直接把模板名賦值到widget繼承屬性的template下就可以了。當頁面調用widget的時候,就會渲染qweb模板內容(html片段)。
    首先隨便新建一個xml文件作為qweb模板文件使用,內容如下
templates

不要忘記在配置文件中,聲明xml
template qweb的模板內容根內只能存在一個根節點。也就是不能并行存在多個div在templates子級路徑上。否則會出現使用this.$el.find找不到節點對象的情況

t-name就是你要使用的qweb的標志名稱了。在t標簽內可以寫想要的html內容了。
t-esc可以調用上下文的變量,當前示例是與widget結合的模板,所以可以用過widget.name(widget內的this.name)渲染出變量值。
然后在js文件中通過widget調用當前模板

js

這樣一個qweb模板與widget結合的簡單使用就完成了。
t標簽常用的屬性還有一些條件表達式,t-if,t-foreach t-as等,具體用法參考官方文檔內容。

因為odoo自帶了jquery與jquery ui等第三方庫,可以在js中直接使用。

  • qweb與controller結合使用
    本來不知道這種用法的,但是想把百度地圖嵌入odoo中,發現直接assert方法并不能加載外鏈文件,通過查看odoo自帶模塊源碼,發現qweb模板內直接寫個html頁面,可以通過controller直接出來,但是頁面及js就需要自己寫了。
    有空會寫一下百度地圖在odoo中顯示的內容,具體使用就在那里寫吧。

odoo前端應該是基于backbone.js進行設計的,源碼中使用了大量的backbone api,有underscore,backbone基礎的,在使用odoo前端會更順手。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容