Hỏi Lỗi qweb không tìm thấy template

Thảo luận trong 'Hỏi - Đáp' bắt đầu bởi Cuu Nguyen, 26/10/16.

  1. Cuu Nguyen New Member

    Chào mọi người, mình đang tạo website bằng odoo v8. Mình muốn viết một snippet mà cấu trúc hiển thị ra front-end của nó được xử lý bằng javascript. Dưới đây là code ...
    Đầu tiên là cấu trúc snippet:
    Mã (text):
    1. <template id="snippet_hello" inherit_id="website2.snippets" name="Snippet Hello">
    2.     <xpath expr="//div[@id='snippet_structure']" position="inside">
    3.         <div class="oe_snippet">
    4.             <div class="oe_snippet_thumbnail">
    5.                 <img class="oe_snippet_thumbnail_img" src="/path_to_block_icon/block_icon.png"/>
    6.                 <span class="oe_snippet_thumbnail_title">Hello</span>
    7.             </div>
    8.             <section class="oe_snippet_body">
    9.                 <div class="oe_snippet_hello">Hello ...</div>
    10.             </section>
    11.         </div>
    12.     </xpath>
    13.     <xpath expr="//div[@id='snippet_options']" position="inside">
    14.         <div data-snippet-option-id='snippet_hello'
    15.             data-selector=".oe_snippet_hello"
    16.             data-selector-siblings="p, h1, h2, h3, blockquote, .well, .panel">
    17.         </div>
    18.     </xpath>
    19. </template>
    20.  
    Sau đó là một đoạn javascript để xử lý nội dung của snippet:
    Mã (text):
    1.     (function () {
    2.         'use strict';
    3.         var website = openerp.website;
    4.         qweb = openerp.qweb;
    5.         qweb.add_template('/path_to_snippet_qweb_template/snippet_template_filename.xml');
    6.        
    7.         website.snippet.animationRegistry.hello = website.snippet.Animation.extend({
    8.             selector: ".oe_snippet_hello",
    9.             start: function(){
    10.                 var $content = $(qweb.render('website.snippet_hello', {a:1}));
    11.                 $content.appendTo(this.$target);
    12.             },
    13.         });
    14.  
    15.     })();
    Cuối cùng là một qweb template để biểu diễn cấu trúc nội dung của snippet:
    Mã (text):
    1.     <?xml version="1.0" encoding="utf-8"?>
    2.     <templates id="template" xml:space="preserve">
    3.         <t t-name="website.snippet_hello">
    4.             <div contenteditable="false">
    5.                 <p>Hello snippet</p>
    6.                 <t t-esc="a"/>
    7.             </div>
    8.         </t>
    9.     </templates>
    Lỗi "Template 'website.snippet_hello' not found" xảy ra ở dòng :
    Mã (text):
    1. var $content = $(qweb.render('website.snippet_hello', {a:1}));
    Mình để ý thấy nếu đang đăng nhập thì module chạy bình thường, lỗi chỉ xảy ra khi không đăng nhập thôi.
    Mọi người giúp đỡ mình với. Cảm ơn mọi người!
  2. Cuu Nguyen New Member

    Sau khi tìm lại các đoạn js từ các module sẵn có của odoo, mình đã tìm được cách sửa lỗi, dù chưa hiểu rõ cơ chế của nó. Hi vọng sẽ có ích cho bạn nào cũng gặp phải lỗi như mình sau này ...
    Mình thử và phát hiện ra là để gọi hàm qweb.render(), dòng lệnh đó phải nằm trong một khối lệnh gọi dữ liệu lên server:
    Mã (text):
    1. openerp.jsonRpc('/placeholder/','call', {}).then(function(data) {
    2.     self.$target.append(qweb.render('website.snippet_hello', {a:1}));
    3. });
    Với placeholder như sau:
    Mã (text):
    1. @http.route('/placeholder/', type='json', auth="public")
    2.     def placeholder(self):
    3.         return []
    Bạn nào biết cơ chế của việc này thì chỉ cho mình luôn nhé.
    Cảm ơn mọi người!

Chia sẻ trang này