跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 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. 更改Editable Form里的快捷键(更新v 7.0)

更改Editable Form里的快捷键(更新v 7.0)

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

    经常听到用户在抱怨OE的回车不好用。原来国产的很多软件里,总是把回车当成TAB用。唉。迎合用户,改。
    打开:
    \addons\web\static\src\js\view_list_editable.js

    找到(大约line169):

    <br />on_row_keyup: function (e) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var self = this;<br />......<br />
    



    动手。
    首先要支持这个:用户在一个输入框回车,跳转到本行的下一个输入框。要考虑输入框的readonly,invisible...
    思路:先数本行总共有多少个可以输入的input, 然后向后select一个。

    <br /><br />on_row_keyup: function (e) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var self = this;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; switch (e.which) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case KEY_RETURN:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inputs = self.edition_form.$element.find(&#039;input:visible:not(disabled):not([readonly])&#039;)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; idx = $.inArray(e.target, inputs);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(idx &lt; inputs.length-1){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $(&#039;#&#039;+inputs[idx+1].id).select();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.save_row().then(function (result) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (result.created) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.new_record();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br /><br />......<br /><br />
    




    当然,如果到了本行最后一个输入框了,那就执行系统的快捷键,保存本行,跳到下一行吧。

    打完收工。


    以下是为7.0做的改变。

    为了维持用户体验,我还是需要把v7版本的回车快捷键修改一下,使之和v 6.1中一致:

    还是那个文件,line 489,
    (BTW:这个版本支持很多的快捷键,确实提高了用户体验。)

    我们主要修改keyup_ENTER方法:

    <br /><br />keyup_ENTER: function (e) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //return this._next();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var form = this.editor.form;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //找最后一个field<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var last_field = _(form.fields_order).chain()<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .map(function (name) { return form.fields[name]; })<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .filter(function (field) { return field.$el.is(&#039;:visible&#039;); })<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .last()<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .value();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // tabbed from last field in form<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 判断是否换行<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (last_field &amp;&amp; last_field.$el.has(e.target).length) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; e.preventDefault();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this._next();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }else{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //如果不需要换行,转向下一个输入框。<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var source_field = $(e.target).closest(&#039;[data-fieldname]&#039;)<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .attr(&#039;data-fieldname&#039;);<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var fields_order = form.fields_order;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var field_index = _(fields_order).indexOf(source_field);<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var fields = form.fields;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var field;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; do {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (++field_index &gt;= fields_order.length) { return $.when(); }<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; field = fields[fields_order[field_index]];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } while (!field.$el.is(&#039;:visible&#039;));<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; field.focus();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return $.when();<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; },<br />
    
    1 条回复 最后回复
    0
    • mrshellyM 离线
      mrshellyM 离线
      mrshelly
      写于 最后由 编辑
      #2

      Good , 鼠标点击事件是哪个呢?

      我发现个问题. 在 6.1 中, 如果一个 tree view 过宽的话,  点击某行的 最后某列的话. 焦点会定位到第一列.

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

        高!
        OE 这个输入也让我头疼,我都想用原来的dephi通过xmlrpc 接口做输入了

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

          这个可以提交到官方作为一个patch吧

          GoodERP -- Odoo China fork

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

            [quote author=mrshelly link=topic=4205.msg11348#msg11348 date=1339491922]
            Good , 鼠标点击事件是哪个呢?

            我发现个问题. 在 6.1 中, 如果一个 tree view 过宽的话,  点击某行的 最后某列的话. 焦点会定位到第一列.
            [/quote]

            应该是点击什么位置,就编辑什么. 不过估计有点困难. 可以看看这个函数:  render_row_as_form.

            不过想想, 到第一列也没有什么坏处. ;D

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

              这个牛B

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

                强人,再顶.

                其实 回车跳到下个字段, 还有一个 很有用的需求
                ,

                就是实现 tabstop

                1 条回复 最后回复
                0

                • 登录

                • 没有帐号? 注册

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