web js extend
-
1、什么时候需要
web.WebClient
,这个作用是什么?2、在
web.core
中返回的json数据中会有这些键:比如one2many_view_registry,list_widget_registry
,别的js可以给里面add数据,比如core.one2many_view_registry.add('list', One2ManyListView)
。
这个是添加后有什么效果变化,这些东西又怎么使用?3、我
formView.extend()
后没有alert
出东西,哪里有问题了?我是这样理解的:
1、odoo中的tree,list视图实际是不是没有html,都是通过js写出来的啊,kanban视图应该是通过qweb的template写出来的吧;
如果我想要修改某个视图的布局,增加元素,都是要写js实现的吧。2、至于什么是widget,比较模糊。
odoo.define('sps_product', function(require) { 'use strict'; var Client = require('web.WebClient'); var Model = require('web.DataModel'); var Core = require('web.core'); // add var formView = require('web.FormView'); var formRelational = require('web.form_relational'); var ListView = require('web.ListView'); var o2m = Core.one2many_view_registry; alert('core o2m', o2m); formView.extend({ init:function(parent){ this._super(parent); alert('coming11'); this.$el.append("<div>We are so happy to see you again in this menu!</div>"); alert('append after---'); // var self = this; // this._super.apply(this, arguments); // $query = $el.html('<input type="text" placeholder="Search"/>'); // alert('add item===', $query); // this.$('div.o_cp_right').before($query); }, });
-
-
@guwenfengvip163-com
换成include页不行的,感觉inlude里面的没有进去啊,都没有alert的 -
你的JS 进去了么? alert('core o2m', o2m); 这一句能弹出来不
-
@guwenfengvip163-com
alert('core o2m', o2m);这一句alert出来了,是include里面的没有alert出来 -
var FormView = require('web.FormView'); FormView.include({ defaults: _.extend({}, FormView.prototype.defaults, { disable_autofocus: config.device.touch, }), init: function () { this._super.apply(this, arguments); if (config.device.size_class <= config.device.SIZES.XS) { this.rendering_engine = new FormRenderingEngineMobile(this); } }, });
-
@guwenfengvip163-com
没反应的 -
这是@鲍永道 帮忙写的,目前可以达到的效果是在
form
视图中可以显示出跟list
视图一样的search
视图。其他问题:在
form
视图中输入需要搜索的字段的值后也可以像在list
视图中出现下拉式的选择搜索哪个字段,但是搜索后不会出现结果,需要点击面包屑导航的返回去才能看见结果。(也就是搜索后返回的还是等同于在list视图搜索的结果)可改进:我觉得效果应该是搜索后直接跳转到对应的form视图。具体修改涉及到哪里的方法我就不清楚了。
/** * @author taony * @deprecated 用于odoo form可以search搜索 * @since */ odoo.define('web.taony_form_search', function (require) { 'use strict'; var ControlPanel = require('web.ControlPanel'); var Bus = require('web.Bus'); var data = require('web.data'); var Widget = require('web.Widget'); ControlPanel.include({ _update_search_view: function (searchview, is_hidden) { var self = this; if (searchview) { searchview.$buttons = this.nodes.$searchview_buttons; searchview.toggle_visibility(true); self.nodes.$breadcrumbs.width('50%'); } this.nodes.$searchview.toggle(true); this.$el.toggleClass('o_breadcrumb_full', !!is_hidden); } }); });
-
@hui
我根据我的需要修改了一点点,让这个form
视图中的search
框只在我需要的model
中显示出来,其他的model
就不显示了。有个疑问:在浏览器中查看控制台日志的时候会发现,进入
list
视图的时候,searchview
是有值的,也就可以找到正在操作的model
,但是当点击某一个product
进入对应的form
视图的时候,会先出现searchview
的值为undefined
的,然后出现searchview
的值又回来的现象。我觉得应该跟update
的方法有关,但是关键点在哪个,这个就没看懂了。高手在哪里,出来指点指点。
代码如下:
/** * @author taony * @deprecated 用于odoo form可以search搜索 * @since */ odoo.define('web.taony_form_search', function (require) { 'use strict'; var ControlPanel = require('web.ControlPanel'); var Bus = require('web.Bus'); var data = require('web.data'); var Widget = require('web.Widget'); ControlPanel.include({ _update_search_view: function (searchview, is_hidden) { var self = this; if (searchview) { var model = searchview.model if ('product.template' == model){ searchview.$buttons = this.nodes.$searchview_buttons; searchview.toggle_visibility(true); self.nodes.$breadcrumbs.width('50%'); } } this.nodes.$searchview.toggle(true); this.$el.toggleClass('o_breadcrumb_full', !!is_hidden); } }); });