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

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

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 开发与实施交流
  4. odoo中表单中添加按钮点击会出发保存表单中的内容?

odoo中表单中添加按钮点击会出发保存表单中的内容?

已定时 已固定 已锁定 已移动 Odoo 开发与实施交流
19 帖子 5 发布者 14.0k 浏览 1 关注中
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 鲍 离线
    鲍 离线
    鲍永道
    发表于 最后由 编辑
    #2
    taony_test_demo2 form taony_test_demo2.taony_test_demo2
    这个是表单中的xml文件,我在表单底部添加了一个测试按钮,每次我点击测试按钮,都会自动保存表单的内容,生成一条记录。而我想要的是我点击按钮后,做了相应的操作在点击odoo自己的保存按钮再进行保存,不然我什么都没操作点击它就保存了一条记录,要是我取消呢,点击了也是生成一条记录。 这个按钮点击事件我可以在哪里可以修改,我全局都不想要这种保存方式。 希望各位大神帮帮忙。。。
    1 条回复 最后回复
    0
    • 鲍 离线
      鲍 离线
      鲍永道
      发表于 最后由 编辑
      #3

      主要是想知道js是在哪里定义写的,现在odoo里面不管在那个表单里面添加按钮都会,点击都会进行表单保存事件。

      1 条回复 最后回复
      0
      • S 离线
        S 离线
        Siyuan
        发表于 最后由 编辑
        #4

        自己写个带按钮的widget,

        参考文件上传widget,

        js:
        web/static/src/js/views/form_widgets.js

        var FieldBinary = common.AbstractField.extend(common.ReinitializeFieldMixin, {

        xml:

        web/static/src/xml

        overflow-x: hidden
        Uploading ...
        鲍 3 条回复 最后回复
        0
        • 鲍 离线
          鲍 离线
          鲍永道
          发表于 最后由 编辑
          #5

          但是我在xml里面有写name的方法,然后是.py里面定义的,要是用widget那就不会出写在py文件中的事件了。我附上代码你看下。

          1 条回复 最后回复
          0
          • S Siyuan

            自己写个带按钮的widget,

            参考文件上传widget,

            js:
            web/static/src/js/views/form_widgets.js

            var FieldBinary = common.AbstractField.extend(common.ReinitializeFieldMixin, {

            xml:

            web/static/src/xml

            overflow-x: hidden
            Uploading ...
            鲍 离线
            鲍 离线
            鲍永道
            发表于 最后由 编辑
            #6

            @siyuan 但是我在xml里面有写name的方法,然后是.py里面定义的,要是用widget那就不会出写在py文件中的事件了。我附上代码你看下。

            1 条回复 最后回复
            0
            • S Siyuan

              自己写个带按钮的widget,

              参考文件上传widget,

              js:
              web/static/src/js/views/form_widgets.js

              var FieldBinary = common.AbstractField.extend(common.ReinitializeFieldMixin, {

              xml:

              web/static/src/xml

              overflow-x: hidden
              Uploading ...
              鲍 离线
              鲍 离线
              鲍永道
              发表于 最后由 编辑
              #7

              @siyuan 0_1502696246607_微信图片_20170814153632.png
              这个是xml文件中定义的button
              另外button中的name就是py文件中模块下定义的方法,代码如下:
              0_1502696336054_微信图片_20170814153847.png
              我目前只是为了测试,所以没有写如其他的操作,只是为了解决点击按钮保存表单数据的问题。

              1 条回复 最后回复
              0
              • S Siyuan

                自己写个带按钮的widget,

                参考文件上传widget,

                js:
                web/static/src/js/views/form_widgets.js

                var FieldBinary = common.AbstractField.extend(common.ReinitializeFieldMixin, {

                xml:

                web/static/src/xml

                overflow-x: hidden
                Uploading ...
                鲍 离线
                鲍 离线
                鲍永道
                发表于 最后由 编辑
                #8

                @siyuan 一般定义的name方法是用来操作模块数据的,我另外的方法代码:
                0_1502697401945_微信图片_20170814155628.png

                1 条回复 最后回复
                0
                • S 离线
                  S 离线
                  Siyuan
                  发表于 最后由 编辑
                  #9
                  1. odoo js框架 的修改属于比较中高级的,如果不是对最基本的xml+.py文件很熟悉的话,
                    我不介意你修改js (当然我不知道你有什么具体业务需要,导致目前的odoo框架满足不了需求)

                  2. 你在xml文件里面加button,走的肯定还是odoo js 框架默认的form 渲染流程,按钮点击会触发保存事件。

                  如果你不要触发保存事件.

                  A. 修改web模块里面form view 的保存机制,但除非你对odoo js 框架非常熟悉,不然不推荐,因为不知道会不会改出其他问题。

                  B. 参考附件上传widget,自己写个widget,和form view 本身独立开,自己控制widget上的按钮事件,这个和.py文件的通讯要自己解决。
                  (odoo js 框架本身有封装调用.py的方法,call_kw)

                  如果你是odoo 初学者,我不介意你这么做;真有需要,最好找资深的二次开发的人员咨询(应该会收费)

                  鲍 2 条回复 最后回复
                  0
                  • S Siyuan
                    1. odoo js框架 的修改属于比较中高级的,如果不是对最基本的xml+.py文件很熟悉的话,
                      我不介意你修改js (当然我不知道你有什么具体业务需要,导致目前的odoo框架满足不了需求)

                    2. 你在xml文件里面加button,走的肯定还是odoo js 框架默认的form 渲染流程,按钮点击会触发保存事件。

                    如果你不要触发保存事件.

                    A. 修改web模块里面form view 的保存机制,但除非你对odoo js 框架非常熟悉,不然不推荐,因为不知道会不会改出其他问题。

                    B. 参考附件上传widget,自己写个widget,和form view 本身独立开,自己控制widget上的按钮事件,这个和.py文件的通讯要自己解决。
                    (odoo js 框架本身有封装调用.py的方法,call_kw)

                    如果你是odoo 初学者,我不介意你这么做;真有需要,最好找资深的二次开发的人员咨询(应该会收费)

                    鲍 离线
                    鲍 离线
                    鲍永道
                    发表于 最后由 编辑
                    #10

                    @siyuan 非常感谢你,谢谢这么全面友好的建议,非常感谢。

                    1 条回复 最后回复
                    0
                    • 鲍 离线
                      鲍 离线
                      鲍永道
                      发表于 最后由 编辑
                      #11

                      我已经解决了这个bug,我是在odoo前端js基础上进行调整的,代码也非常简单,只是在找事件代码花费了一天多的时间,有需要的调整的朋友可以直接联系我。

                      H 1 条回复 最后回复
                      0
                      • 鲍 离线
                        鲍 离线
                        鲍永道
                        发表于 最后由 编辑
                        #12

                        @Siyuan 也非常感谢管理员@Siyuan 的帮助和建议,非常感谢。

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

                          你可以试试用action类型的按钮

                          <button name='foo' type='action'/>

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

                          1 条回复 最后回复
                          0
                          • S Siyuan
                            1. odoo js框架 的修改属于比较中高级的,如果不是对最基本的xml+.py文件很熟悉的话,
                              我不介意你修改js (当然我不知道你有什么具体业务需要,导致目前的odoo框架满足不了需求)

                            2. 你在xml文件里面加button,走的肯定还是odoo js 框架默认的form 渲染流程,按钮点击会触发保存事件。

                            如果你不要触发保存事件.

                            A. 修改web模块里面form view 的保存机制,但除非你对odoo js 框架非常熟悉,不然不推荐,因为不知道会不会改出其他问题。

                            B. 参考附件上传widget,自己写个widget,和form view 本身独立开,自己控制widget上的按钮事件,这个和.py文件的通讯要自己解决。
                            (odoo js 框架本身有封装调用.py的方法,call_kw)

                            如果你是odoo 初学者,我不介意你这么做;真有需要,最好找资深的二次开发的人员咨询(应该会收费)

                            鲍 离线
                            鲍 离线
                            鲍永道
                            发表于 最后由 编辑
                            #14

                            @siyuan 你好,请问下具体的js调用.py的方法是在哪里呢?或是具体的方法名知道吗?知道这个下次也好自定义按钮。

                            S 1 条回复 最后回复
                            0
                            • 鲍 鲍永道

                              @siyuan 你好,请问下具体的js调用.py的方法是在哪里呢?或是具体的方法名知道吗?知道这个下次也好自定义按钮。

                              S 离线
                              S 离线
                              Siyuan
                              发表于 最后由 编辑
                              #15

                              @鲍永道

                              web/static/src/js/framework/model.js

                              /**
                               * Call a method (over RPC) on the bound OpenERP model.
                               *
                               * @param {String} method name of the method to call
                               * @param {Array} [args] positional arguments
                               * @param {Object} [kwargs] keyword arguments
                               * @param {Object} [options] additional options for the rpc() method
                               * @returns {jQuery.Deferred<>} call result
                               */
                              call: function (method, args, kwargs, options) {
                                  args = args || [];
                                  kwargs = kwargs || {};
                                  if (!_.isArray(args)) {
                                      // call(method, kwargs)
                                      kwargs = args;
                                      args = [];
                                  }
                                  var call_kw = '/web/dataset/call_kw/' + this.name + '/' + method;
                                  return session.rpc(call_kw, {
                                      model: this.name,
                                      method: method,
                                      args: args,
                                      kwargs: kwargs
                                  }, options);
                              },
                              
                              鲍 1 条回复 最后回复
                              0
                              • S Siyuan

                                @鲍永道

                                web/static/src/js/framework/model.js

                                /**
                                 * Call a method (over RPC) on the bound OpenERP model.
                                 *
                                 * @param {String} method name of the method to call
                                 * @param {Array} [args] positional arguments
                                 * @param {Object} [kwargs] keyword arguments
                                 * @param {Object} [options] additional options for the rpc() method
                                 * @returns {jQuery.Deferred<>} call result
                                 */
                                call: function (method, args, kwargs, options) {
                                    args = args || [];
                                    kwargs = kwargs || {};
                                    if (!_.isArray(args)) {
                                        // call(method, kwargs)
                                        kwargs = args;
                                        args = [];
                                    }
                                    var call_kw = '/web/dataset/call_kw/' + this.name + '/' + method;
                                    return session.rpc(call_kw, {
                                        model: this.name,
                                        method: method,
                                        args: args,
                                        kwargs: kwargs
                                    }, options);
                                },
                                
                                鲍 离线
                                鲍 离线
                                鲍永道
                                发表于 最后由 编辑
                                #16

                                @siyuan 非常感谢,我具体需要研究下,方便下次自定义使用,再次感谢。

                                1 条回复 最后回复
                                0
                                • 鲍 鲍永道

                                  我已经解决了这个bug,我是在odoo前端js基础上进行调整的,代码也非常简单,只是在找事件代码花费了一天多的时间,有需要的调整的朋友可以直接联系我。

                                  H 离线
                                  H 离线
                                  hui
                                  发表于 最后由 编辑
                                  #17

                                  @鲍永道
                                  我想知道odoo服务端怎么跟前端联系的,还有就是前端通过attr设置的必填的选项,这个odoo是怎么检查的?

                                  D 1 条回复 最后回复
                                  0
                                  • H hui

                                    @鲍永道
                                    我想知道odoo服务端怎么跟前端联系的,还有就是前端通过attr设置的必填的选项,这个odoo是怎么检查的?

                                    D 离线
                                    D 离线
                                    digitalsatori
                                    管理员
                                    发表于 最后由 digitalsatori 编辑
                                    #18

                                    @1234567 在 odoo中表单中添加按钮点击会出发保存表单中的内容? 中说:

                                    @鲍永道
                                    我想知道odoo服务端怎么跟前端联系的,还有就是前端通过attr设置的必填的选项,这个odoo是怎么检查的?

                                    服务器端跟前端联系?只有websocket这样的协议才有可能实现前后端的双向通信。http协议只有前端向后端发请求,并且是无状态的(就是下一个请求完全不知道上一个请求干了啥),没有反过来的 😉

                                    【上海先安科技】(tony AT openerp.cn)

                                    H 1 条回复 最后回复
                                    1
                                    • D digitalsatori

                                      @1234567 在 odoo中表单中添加按钮点击会出发保存表单中的内容? 中说:

                                      @鲍永道
                                      我想知道odoo服务端怎么跟前端联系的,还有就是前端通过attr设置的必填的选项,这个odoo是怎么检查的?

                                      服务器端跟前端联系?只有websocket这样的协议才有可能实现前后端的双向通信。http协议只有前端向后端发请求,并且是无状态的(就是下一个请求完全不知道上一个请求干了啥),没有反过来的 😉

                                      H 离线
                                      H 离线
                                      hui
                                      发表于 最后由 编辑
                                      #19

                                      @digitalsatori
                                      我表述的有问题。应该是前端如何向后端发送请求,还有odoo种简单实现按钮变色的js是怎样的,没有html不知如何处理?谢谢指导。

                                      1 条回复 最后回复
                                      0

                                      你好!看起来您对这段对话很感兴趣,但您还没有一个账号。

                                      厌倦了每次访问都刷到同样的帖子?您注册账号后,您每次返回时都能精准定位到您上次浏览的位置,并可选择接收新回复通知(通过邮件或推送通知)。您还能收藏书签、为帖子顶,向社区成员表达您的欣赏。

                                      有了你的建议,这篇帖子会更精彩哦 💗

                                      注册 登录
                                      回复
                                      • 在新帖中回复
                                      登录后回复
                                      • 从旧到新
                                      • 从新到旧
                                      • 最多赞同


                                      • 登录

                                      • 没有帐号? 注册

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