跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 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. odoo10 js实现全局搜索某个模型

odoo10 js实现全局搜索某个模型

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

    借鉴gooderp的搜索的JS代码和XML代码如下:
    问题:
    1、show_query_board这个函数中的是使用 new Model('product.template').call()。
    实际是想查询字段code=XXX值的model并跳转到查询到的form视图上,现在都是跳转到的视图都是新建的视图且是编辑状态的,怎么跳转到通过name_search查询到的code的有具体信息的form视图?
    2、'values': _.map(results, function(result) {} 渲染视图的 时候,这个方法_.map()什么意思,是python中map()函数的翻版使用吗?都有哪些这种函数,官方文档中没有找到?
    3、查询的数据返回json数据的时候,key是不是就是在xml中引用的?xml代码如下。看应用是不是有问题。

    或者有都介绍下这个使用的都行。

    JS代码:

    odoo.define('web_stock_query', function(require) {
        var Client = require('web.WebClient');
        var Model = require('web.DataModel');
        var Core = require('web.core');
    //    var modell = new instance.web.Model("product.template");
        
        Client.include({
            show_application: function() {
                this._super.apply(this, arguments);
                this.show_stock_query();
                this.$board = false;
            },
    
            show_stock_query: function() {
                var self = this,
                    $query = $('<ul class="nav navbar-nav navbar-right nav-stock-query"><li><input type="text" placeholder="查询"/><a class="query"></a><a class="destroy"></a><div class="stock-query-search-list"/></li></ul>'),
                    $input = $query.find('input'),
                    $destroy = $query.find('.destroy');
    
                $input.on('focus', function(event) {
                    $input.addClass('editable');
                    if ($input.val() !== '' && self.$board) self.$board.fadeIn('fast');
                }).on('blur', function(event) {
                    if ($input.val() === '') {
                        $input.removeClass('editable');
                    }
                    self.hide_query_board();
                }).on('input', function(event) {
                    if ($input.val() === '') {
                        $destroy.fadeOut('fast');
                        self.hide_query_board();
                    } else {
                        $destroy.fadeIn('fast');
                        self.show_query_board($input);
                    }
                }).on('keydown', function(event) {
                    switch (event.which) {
                        case $.ui.keyCode.ENTER:
                            self.select_query();
                            break;
                        case $.ui.keyCode.DOWN:
                            self.query_board_move('down');
                            event.preventDefault();
                            break;
                        case $.ui.keyCode.UP:
                            self.query_board_move('up');
                            event.preventDefault();
                            break;
                    }
                });
    
                $query.on('mousedown', '.stock-query-search-list li:not(.search-list-more)', function(event) {
    //                alert('mousedown====')
                    self.select_query($(this));
                }).on('mousedown', '.search-list-more', function(event) {
    //                alert('mousedown')
                    self.open_report_stock_balance();
                }).on('hover', '.stock-query-search-list li', function(event) {
                    self.query_board_move($(this));
                }).on('click', '.destroy', function(event) {
                    $input.val('');
                    $input.focus();
                    $destroy.fadeOut('fast');
                });
    
                $('.oe_systray').before($query);
            },
    
            show_query_board: function($input) {
                var self = this;
                new Model('product.template').call('name_search', {name: $input.val()} ).then(function(results) {
                var self = this;
                if (results.length <= 0) return self.hide_query_board();
    
                self.$board = $(Core.qweb.render('web_stock_query.search_list', {'values': _.map(results, function(result) {
                    return {id: result[0], default_code: result[1]};
                })}));
    
                self.$board.attr('top', $input.height() + 2 + 'px');
                $input.parent().find('.stock-query-search-list').html(self.$board);
            });
            },
    
            hide_query_board: function() {
                if (this.$board) this.$board.fadeOut('fast');
            },
    
            query_board_move: function(direction) {
    //            alert('query board move');
                if (this.$board) {
                    var current_move = this.$board.find('li.select'),
                        next_move = false;
    
                    if (_.contains(['up', 'down'], direction)) {
                        next_move = direction === 'down'? current_move.next(): current_move.prev();
                        if (next_move && next_move.is('li')) {
                            var offset_y = next_move.offset().top - (direction === 'down'? this.$board.height(): 40);
                            this.$board.scrollTop(this.$board.scrollTop() + offset_y);
                        }
                    } else if (direction.jquery) {
                        next_move = direction;
                    }
    
                    if (next_move && next_move.is('li')) {
                        next_move.addClass('select').siblings('.select').removeClass('select');
                    }
                }
            },
    
            open_report_stock_balance: function() {
    //            alert('===open report stock balance==');
                this.action_manager.do_action({
                    type: 'ir.actions.act_window',
                    res_model: 'product.template',
                    views: [[381, 'form'], [false, 'list']],
    //                limit:80000,
                    target: 'current',
                    name: 'Parts',
                });
            },
    
            select_query: function($target) {
    //            alert('----select query----');
                var self = this;
                if (self.$board) {
                    $target = $target || self.$board.find('li.select');
                    if ($target.hasClass('search-list-more')) {
                        return self.open_report_stock_balance();
                    }
    
                    self.action_manager.do_action({
                        type: 'ir.actions.act_window',
                        res_model: 'product.template',
                        views: [[381, 'form'], [false, 'list']],
    //                    domain: [['default_code', '=', $target.data('default_code')]],
                        target: 'current',
    //                    name: 'Parts',
                        name: '搜索:' + $target.text().trim(),
                    });
                }
            }
        });
    });
    
    

    XML代码:

    <?xml version='1.0' encoding='UTF-8'?>
    <templates id='template' xml:space='preserve'>
    <t t-name='web_stock_query.search_list'>
        <ul >
            <li t-foreach='values' t-as='product_number' t-attf-class='{{ default_code and "select" or ""}}' t-att-data-id='id' >
                <t t-esc='default_code' />
            </li>
    
            <li class='search-list-more'>查询</li>
    
        </ul>
    </t>
    </templates>
    
    1 条回复 最后回复
    0

    • 登录

    • 没有帐号? 注册

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