【odoo 10.0】widget開發(fā)及Qweb基本使用

參考文檔

Building Interface Extensions — odoo 10.0 documentation odoo官網(wǎng)的開發(fā)文檔

widget視圖

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

準備階段

當前目錄結(jié)構(gòu)如圖:

目錄結(jié)構(gòu)

主要代碼在js文件中棍丐,src-xml內(nèi)文件主要存放qweb模板

  • 首先把自己創(chuàng)建的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>

  • 頁面調(diào)用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>

創(chuàng)建一個widget

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


    不成功代碼
  • 下面主要介紹新的聲明方式創(chuàng)建widget
    這種寫法更適用于模塊化前端編程苛蒲,使用require.js進行前端開發(fā)的會比較熟悉
    首先通過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');

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

widget

最后在注冊一下wdget寄月,頁面中才能調(diào)用

registry

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

qweb模板的使用

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

  • 與widget結(jié)合茎毁,簡單使用模板
    記錄下在widget中使用qweb模板克懊。很簡單忱辅,直接把模板名賦值到widget繼承屬性的template下就可以了。當頁面調(diào)用widget的時候谭溉,就會渲染qweb模板內(nèi)容(html片段)墙懂。
    首先隨便新建一個xml文件作為qweb模板文件使用,內(nèi)容如下
templates

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

t-name就是你要使用的qweb的標志名稱了柜与。在t標簽內(nèi)可以寫想要的html內(nèi)容了巧勤。
t-esc可以調(diào)用上下文的變量,當前示例是與widget結(jié)合的模板弄匕,所以可以用過widget.name(widget內(nèi)的this.name)渲染出變量值颅悉。
然后在js文件中通過widget調(diào)用當前模板

js

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

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

  • qweb與controller結(jié)合使用
    本來不知道這種用法的芙贫,但是想把百度地圖嵌入odoo中搂鲫,發(fā)現(xiàn)直接assert方法并不能加載外鏈文件,通過查看odoo自帶模塊源碼磺平,發(fā)現(xiàn)qweb模板內(nèi)直接寫個html頁面魂仍,可以通過controller直接出來,但是頁面及js就需要自己寫了拣挪。
    有空會寫一下百度地圖在odoo中顯示的內(nèi)容擦酌,具體使用就在那里寫吧。

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市舔痪,隨后出現(xiàn)的幾起案子寓调,更是在濱河造成了極大的恐慌,老刑警劉巖锄码,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夺英,死亡現(xiàn)場離奇詭異晌涕,居然都是意外死亡,警方通過查閱死者的電腦和手機痛悯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門余黎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人灸蟆,你說我怎么就攤上這事驯耻。” “怎么了炒考?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長霎迫。 經(jīng)常有香客問我斋枢,道長,這世上最難降的妖魔是什么知给? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任瓤帚,我火速辦了婚禮,結(jié)果婚禮上涩赢,老公的妹妹穿的比我還像新娘戈次。我一直安慰自己,他們只是感情好筒扒,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布怯邪。 她就那樣靜靜地躺著,像睡著了一般花墩。 火紅的嫁衣襯著肌膚如雪悬秉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天冰蘑,我揣著相機與錄音和泌,去河邊找鬼。 笑死祠肥,一個胖子當著我的面吹牛武氓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播仇箱,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼县恕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了工碾?” 一聲冷哼從身側(cè)響起弱睦,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渊额,沒想到半個月后况木,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垒拢,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年火惊,在試婚紗的時候發(fā)現(xiàn)自己被綠了求类。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡屹耐,死狀恐怖尸疆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情惶岭,我是刑警寧澤寿弱,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站按灶,受9級特大地震影響症革,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鸯旁,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一噪矛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧铺罢,春花似錦艇挨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辞居,卻和暖如春楷怒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瓦灶。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工鸠删, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贼陶。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓刃泡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親碉怔。 傳聞我的和親對象是個殘疾皇子烘贴,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容