2017-02-14 6 views
0

Ich muss etwas zu tun, völlig falsch:Odoo10 - Wie Sie Javascript tun

odoo.define('my_module.popups', function (require) { 
    'use strict'; 
    var ajax = require('web.ajax'); 
    var core = require('web.core'); 
    var _t = core._t; 
    var qweb = core.qweb; 
    ajax.loadXML('/my_module/static/xml/templates.xml', qweb); 

    var data = {modal_title: 'This is a popup!',modal_body: 'testtest'}; 
    var p = qweb.render("my_module.popup1_template", data); 
    p.prependTo('body'); 
}); 

Ich bin nicht sicher ich das verstehen. Der Code innerhalb von define wird niemals ausgeführt. Ich lese viele Dokumente und Beispiele, wie man ein Widget etc. erstellt. Aber die Dokumentation erklärt nie, wie man dieses Zeug, das man in die "Definition" legt, benutzt/nennt.

Ich könnte auch einfach manuell ein Popup erstellen und es dem body-Element voranstellen, aber ich möchte dies odoo Weise tun.

+0

Wird diese js-Datei irgendwo in einer Vorlage referenziert? Ich meine das Skript-Tag, dessen Quellcode auf Ihre Datei zeigt. – Majikat

+0

ja, die Datei ist korrekt referenziert – user568021

+0

Ich habe gerade herausgefunden, dass Code bei ajax.loadXML Zeile abstürzt. – user568021

Antwort

1

Ich höre dich, ich denke, die Geheimnisse von Odoo js Rahmen sind die Geheimwaffe, die viele Leute gerne für sich behalten. Ich bin sicher, es ist alles völlig offensichtlich, wenn Sie die letzten 4 Jahre damit verbracht haben, mit Backbone, Requirejs und Unterstrichen zu arbeiten. Leider bin ich das nicht.

Wenn Sie sich das Benachrichtigungsmodul in /addons/web/static/src/js/widgets/notification.js ansehen, sollten Sie in der Lage sein zu sehen, was sie tun. Einige Dinge, die Ihnen helfen könnten, sind eine Anmeldung, um zu sehen, ob und wann Ihre Skripte geladen werden. Für das, was Sie versuchen, müssen Sie einige Ereignisse zuordnen. Es gibt ein Beispiel in der Datei, die ich erwähnt habe. In Ihrem jsmodule erstellen Sie ein Objekt mit einem Ereignisattribut, das ungefähr so ​​aussieht.

events: { 
    'click .o_close': function(e) { 
     e.preventDefault(); 
     this.destroy(true); 
    }, 
    'hover .my_widget_class': function(e){ 
     // your code here 
    }, 
}, 

Den obigen Code nicht wörtlich nehmen. Sie benötigen ein Ereignis, das Ihr Widget zu einem bestimmten Zeitpunkt an dom anhängt.

+0

Traurig. Ich habe das nie gelöst und tat das auf die alte Art und Weise. Wenn ich mir den Code anschaue, sehe ich, dass sie ein Widget in einem anderen Widget erstellen. Ok, aber ich verstehe immer noch nicht wann/wie/wo dieses erste Widget erstellt wurde. :( – user568021

+0

Ich plane in naher Zukunft mehr mit dem js Framework zu tun. Ich habe gerade ein riesiges Projekt gemacht, das alles für eine benutzerdefinierte POS Schnittstelle war, also werde ich besser. Aber ich stimme zu, das js Framework in Odoo ist komplett dokumentiert und heruntergespielt, aber der Wert von tiefem Wissen in diesem Bereich ist wahrscheinlich noch wertvoller als ein starkes Wissen über den Rest von Odoo's APIs. –

Verwandte Themen