js調用.py文件中定義的類
形式如下:
//創建product.product類
var prod_obj=new instance.web.Model("product.product")
//調用prod_obj中的方法
prod_obj.call("get_defult_data",[element_ids,self.view.model,context]).then(function(result) {
})
在創建類時還可以帶參數:
var mod = new instance.web.Model("account.move.line", context, domain);
詳解:
用於連接OpenERP models的類是 instance.web.Model 當你實例化它,必須以試圖連接的OpenERP model 名稱作爲第一個參數傳入構造函數。
call(name, args, kwargs) 是Model的方法,用來調用OpenERP的服務器端model中的任意方法。下面參數說明:
1)name 是要調用的model中方法的名稱。
2)args 是一個傳給方法的基於位置的參數列表。例:
def my_method2(self, cr, uid, a, b, c, context=None): ...
model.call("my_method", [1,2,3], ...
// 對應參數值:a=1,b=2,c=3
3)kwargs 是一個傳遞給函數的命名參數列表。例:
def my_method2(self, cr, uid, a, b, c, context=None): ...
model.call("my_method", [], {a: 1, b: 2, c: 3, ...
// 對應參數值:a=1,b=2,c=3
Context說明:
Context是個“神奇”參數,Web客戶端在調用服務端方法時,總是傳遞給服務端。context是一個包含多個key的dictionary。其中一個最重要的關鍵是用戶的語言,服務器用來翻譯應用程序的所有消息。另一個是用戶的時區,如果使用OpenERP位於不同國家,用來計算正確的日期和時間。
model.call("my_method", [], {context: new instance.web.CompoundContext()})
Context是所有方法中必須有的參數,因爲如果我們忘記了,可能會發生不好的事情(如應用程序沒有被正確翻譯)。這就是爲什麼,當你調用model的方法時,總需要給出這樣的參數。解決辦法是:使用類instance.web.CompoundContext。
CompoundContext這個類用來傳遞用戶上下文(語言,時區等)給服務器的,以及增加新的上下文key(某些model方法通過任意key添加到上下文中)。其構造函數的參數是任意數量的dictionary,或一個其他的CompoundContext實例。它將合併所有上下文信息,再發送到服務器。