Odoo-9,我的小部件在QWeb视图中不起作用

时间:2016-12-20 10:23:16

标签: javascript xml openerp odoo-8 odoo-9

我在Odoo 9中创建了一个小部件,用于在website view中剪切产品描述。已将widget="short_desc"添加到产品表单视图和网站产品视图中。我的意思是这样的:

<span t-field="product.description"/> <!-- full description -->
<span t-field="product.description" t-field-options='{"widget": "short_desc"}'/> <!-- short description -->
<span t-field="product.description" widget="short_desc"/> <!-- also tried this syntax -->

我发现这个答案很有用:Odoo 9. How to override form widgets?,但它仅适用于product form而且不适用website

所以,我有一个小部件.js:

odoo.define('wsup.widgets', function (require) {
'use strict';

var core = require('web.core');
var FieldChar = core.form_widget_registry.get('char');

var ShortDescriptionView = FieldChar.extend({
    render_value: function() {
        console.log('hey, im working!');
        this.$el.html('<span>Ok, widget really works</span>');
    },
});

core.form_widget_registry.add('short_desc', ShortDescriptionView);
});

当我转到Sales -> Products并打开任何产品时,我可以看到&#34;好的,小部件确实有用&#34;而不是它的描述,但是当我转到/shop页面时 - 产品描述在JS控制台中仍然没有任何变化。

以下是我的网站产品XML视图的一部分(除了简短描述部分外,它一切都很好):

<div class="product-preview oe_website_sale">
    <div class="product-preview__image">
        <a t-attf-href="/shop/product/{{ item.id }}">
            <span itemprop="image" t-field="item.image" t-field-options='{"widget": "image"}' t-att-alt="item.name"/>
        </a>
    </div>
    <div class="product-preview__info text-center">
        <div class="product-preview__info__title">
            <h2><a t-attf-href="/shop/product/{{ item.id }}"><span t-field="item.name"/></a></h2>
        </div>
        <div class="product-preview__info__description">
            <p><span t-field="item.description" t-field-options='{"widget": "short_desc"}'/></p>
        </div>
    </div>
</div>

为什么它不在/shop页面上工作?我忘了做什么?谢谢。

1 个答案:

答案 0 :(得分:2)

据我了解您的评论,您的要求是显示少量描述而不是显示大量描述。所以,我认为可以在不创建小部件的情况下轻松实现此要求。

假设您将此内容描述为:

两个比一个好。

与许多小型耳机不同,Apple入耳式耳机的每个耳机都包含两个独立的高性能驱动器 - 一个用于处理低音和中音声音的低音扬声器和一个用于高频音频的高音扬声器。这些专用驱动器有助于确保整个声波频谱的准确,细致的声音。结果是:你沉浸在音乐中,听到你从未知道的细节。即使在听老歌的时候,你可能会觉得你是第一次听到它。

从这么多描述中,如果你想显示少量的描述或单词数量,你可以简单地使用下面的代码。

<span t-if="product.website_description and len(product.website_description) &gt; 500">
    <t t-set="description" t-value="product.website_description[:500] and product.website_description[:500].replace('+', '\n')+'...'"/>
        <p class="text-muted ">
            <t t-raw="description"/>
        </p>
</span>

在上面的代码中,[:500]将是要使用的单词数。

输出将是:

两个比一个好。

与许多小型耳机不同,Apple入耳式耳机的每个耳机都包含两个独立的高性能驱动器 - 一个低音扬声器...

希望,此代码可以帮助您。 感谢。