跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 开发与实施交流
  4. Js初探

Js初探

已定时 已固定 已锁定 已移动 Odoo 开发与实施交流
14 帖子 10 发布者 8.6k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • P 离线
    P 离线
    panyi5202
    写于 最后由 编辑
    #1

    最近准备通过js来对oe的页面做一些默认没有的效果,先研究下页面的按钮要怎么样才能调用到js方法;
    研究的思路如下:
    1、先要让js文件加载到页面;
    2、初始化js的对象;
    3、按钮的方法要能调用到js的对象的方法;这里有两种路径,一种是页面的按钮经过后台的python方法调用js方法,一种是在页面的按钮上定义onclick事件,直接调用;

    碰到的问题如下:
    1、通过在__openerp__.py文件中定义js,是可以加载js文件的,但是发现js文件加载到页面后,并没有初始化;

    解决办法:
    1、经过@深圳-Tommy的提醒,在js中定义的对象,必须和模块名相同;
    2、如果要页面的按钮上添加onclick事件,需要在按钮外面包<html>标签。

    老规矩,附上代码:
    openerp.py中的js文件引入:

    {...<br />&nbsp; &nbsp; &quot;installable&quot; : True,&nbsp; # 可否安装&nbsp; &nbsp; &nbsp;  <br />&nbsp; &nbsp; &#039;auto_install&#039;: False,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  <br />&nbsp; &nbsp; &quot;category&quot;:u&#039;保险&#039;,&nbsp; # 模块类型<br />&nbsp; &nbsp; &#039;js&#039;: &#91;&#039;static/src/js/syt_insurance222.js&#039;,],<br />}
    


    js类定义如下:

    openerp.syt_insurance = function(instance) {<br />	instance.web.client_actions.add(&#039;bt_start&#039;, &#039;instance.syt_insurance.btn_start&#039;);<br />	instance.syt_insurance.btn_start = function() {<br />		var self = this;<br />		alert(&#039;test&#039;);<br />		return false;<br />	};<br />};<br />function aaa(){<br />	alert(123);<br />}<br />
    


    页面调用,通过python方法:

    &lt;button name=&quot;call_js&quot;&nbsp; groups=&quot;base.group_erp_manager&quot;&nbsp; string=&quot;调用js方法&quot; type=&quot;object&quot;/&gt;
    


    页面调用,直接通过onclick:

    &lt;html&gt;<br />	&lt;input type=&quot;button&quot; value=&quot;获得设备代码&quot; onclick=&quot;aaa(this)&quot; class=&quot;oe_button oe_form_button_save&quot;/&gt;<br /> &lt;/html&gt;
    


    python类中定义的方法:

    def call_js(self, cr, uid, ids,context=None): <br />&nbsp; &nbsp; &nbsp; &nbsp; context={}<br />&nbsp; &nbsp; &nbsp; &nbsp; context[&quot;key&quot;]=&quot;value&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; print &quot;call——js...&quot;<br />&nbsp; &nbsp; &nbsp; &nbsp; ret = {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#039;type&#039;: &#039;ir.actions.client&#039;,<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#039;tag&#039;: &#039;bt_start&#039;,<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#039;context&#039;: context,<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; return ret
    
    1 条回复 最后回复
    0
    • C 离线
      C 离线
      codefans
      写于 最后由 编辑
      #2

      顶

      1 条回复 最后回复
      0
      • P 离线
        P 离线
        panyi5202
        写于 最后由 编辑
        #3

        openerp.syt_insurance,其中的syt_insurance必须是模块名,否则,这里定义的js对象是不会初始化的。我就是在这个地方浪费了好多事件啊。。。再次感谢Tommy

        1 条回复 最后回复
        0
        • C 离线
          C 离线
          ccdos
          写于 最后由 编辑
          #4

          干货! 必须顶, 已经 “喝彩”

          1 条回复 最后回复
          0
          • 阿 离线
            阿 离线
            阿狸
            写于 最后由 编辑
            #5

            感谢梦姑的分享,让好多新人少走了弯路,赞一个!希望后续再多多分享宝贵的经验,嘿嘿

            1 条回复 最后回复
            0
            • P 离线
              P 离线
              panyi5202
              写于 最后由 编辑
              #6

              多谢阿狸的提醒,把python中的定义的方法补充了一下

              1 条回复 最后回复
              0
              • JoshuaJ 离线
                JoshuaJ 离线
                Joshua 管理员
                写于 最后由 编辑
                #7

                谢谢lz分享,上面展示的是两种触发js的方法吧?一个是通过python代码调用ir.actions.client,另外一种是直接在代码里面插入<html></html>标签?

                【上海先安科技】(joshua AT openerp.cn),欢迎关注公众号:openerp_cn

                1 条回复 最后回复
                0
                • wjfonhandW 离线
                  wjfonhandW 离线
                  wjfonhand
                  写于 最后由 编辑
                  #8

                  很棒,知道原理比像我这样误打误撞效率高得多,不愧是前端老手!

                  GoodERP -- Odoo China fork

                  1 条回复 最后回复
                  0
                  • F 离线
                    F 离线
                    figol
                    写于 最后由 编辑
                    #9

                    想搞js的初级选手,来这里https://github.com/figol/web_scanner; 大牛直接跳过。

                    1 条回复 最后回复
                    0
                    • 卓忆卓 离线
                      卓忆卓 离线
                      卓忆
                      写于 最后由 编辑
                      #10

                      谢谢分享,
                      Mark.

                      恬淡

                      1 条回复 最后回复
                      0
                      • P 离线
                        P 离线
                        puyu
                        写于 最后由 编辑
                        #11

                        但是我用工作流的button的事件去调call_js方法,不行。有什么办法能解决吗?

                        1 条回复 最后回复
                        0
                        • P 离线
                          P 离线
                          puyu
                          写于 最后由 编辑
                          #12

                          [quote author=puyu link=topic=16514.msg29841#msg29841 date=1421206640]
                          但是我用工作流的button的事件去调call_js方法,不行。有什么办法能解决吗?
                          [/quote]

                          这个问题基本解决了。但是如何给js传参的呢?比如把form当前记录的id传给js

                          1 条回复 最后回复
                          0
                          • 佳先生佳 离线
                            佳先生佳 离线
                            佳先生
                            写于 最后由 编辑
                            #13

                            [quote author=panyi5202 link=topic=16514.msg28524#msg28524 date=1405937743]
                            openerp.syt_insurance,其中的syt_insurance必须是模块名,否则,这里定义的js对象是不会初始化的。我就是在这个地方浪费了好多事件啊。。。再次感谢Tommy
                            [/quote]

                            谢谢,不过我这里出现了一个问题,我新建了个模块,加入js,但是怎么也调不到。。,在view里写xml

                            1 条回复 最后回复
                            0

                            • 登录

                            • 没有帐号? 注册

                            • 登录或注册以进行搜索。
                            • 第一个帖子
                              最后一个帖子
                            0
                            • 版块
                            • 标签
                            • 热门
                            • 用户
                            • 群组