Установленные модули Odoo импортируются, как уже упоминалось в комментарии. Так что, если вы не import
определите ваши модели. Например, предположим, что файлы определения модели .py
организованы следующим образом:
root_addon_directory/
__init__.py
models/
__init__.py
my_model.py
Затем вы можете импортировать определение модели с помощью относительного импорта пути следующим образом:
root_addon_directory __init__.py содержимое файла
blockquote>from . import models
каталог моделей __init__.py содержимое файла
blockquote>from . import my_model
jQuery делает это относительно легко, потому что он хранит обработчики событий в данных элемента. Вы должны иметь возможность использовать что-то вроде этого:
(function($) {
$.eventReport = function(selector, root) {
var s = [];
$(selector || '*', root).andSelf().each(function() {
// the following line is the only change
var e = $.data(this, 'events');
if(!e) return;
s.push(this.tagName);
if(this.id) s.push('#', this.id);
if(this.className) s.push('.', this.className.replace(/ +/g, '.'));
for(var p in e) {
var r = e[p],
h = r.length - r.delegateCount;
if(h)
s.push('\n', h, ' ', p, ' handler', h > 1 ? 's' : '');
if(r.delegateCount) {
for(var q = 0; q < r.length; q++)
if(r[q].selector) s.push('\n', p, ' for ', r[q].selector);
}
}
s.push('\n\n');
});
return s.join('');
}
$.fn.eventReport = function(selector) {
return $.eventReport(selector, this);
}
})(jQuery);
, и вы можете назвать это:
// all events
alert($.eventReport());
// just events on inputs
alert($.eventReport('input'));
// just events assigned to this element
alert($.eventReport('#myelement'));
// events assigned to inputs in this element
alert($.eventReport('input', '#myelement'));
alert($('#myelement').eventReport('input')); // same result
// just events assigned to this element's children
alert($('#myelement').eventReport());
alert($.eventReport('*', '#myelement'); // same result
ОБНОВЛЕНИЕ: Я добавил подсчет обработчиков и некоторую информацию о делегированных событиях к выводу вышеуказанной функции.
ОБНОВЛЕНИЕ (24.08.2012):
Хотя вышеуказанная функция все еще работает в jQuery 1.7.2 и ниже, jQuery больше не сохраняет объект события в jQuery.data (elem, 'events')
и , если вы используете jQuery 1.8 или новее Вы больше не сможете использовать вышеуказанную функцию!
В обмен на jQuery.data (elem, 'events')
теперь вы можете использовать jQuery._data (elem, 'events'). )
. Обновление вышеупомянутой функции будет выглядеть следующим образом:
(function($) {
$.eventReport = function(selector, root) {
var s = [];
$(selector || '*', root).addBack().each(function() {
// the following line is the only change
var e = $._data(this, 'events');
if(!e) return;
s.push(this.tagName);
if(this.id) s.push('#', this.id);
if(this.className) s.push('.', this.className.replace(/ +/g, '.'));
for(var p in e) {
var r = e[p],
h = r.length - r.delegateCount;
if(h)
s.push('\n', h, ' ', p, ' handler', h > 1 ? 's' : '');
if(r.delegateCount) {
for(var q = 0; q < r.length; q++)
if(r[q].selector) s.push('\n', p, ' for ', r[q].selector);
}
}
s.push('\n\n');
});
return s.join('');
}
$.fn.eventReport = function(selector) {
return $.eventReport(selector, this);
}
})(jQuery);
ОБНОВЛЕНИЕ (25.04.2013):
andSelf ()
устарело с 1.8.x http://bugs.jquery.com / ticket / 9800 , я заменил на addBack ()
.
Могу поспорить, что вы можете пройти DOM и проверить атрибут события на каждом элементе, создающем список ... но я никогда не пробовал.