Apostrophe cms - inline editing of rich text in cu

2019-03-03 13:16发布

问题:

I can't make inline editing of rich text save back to the db in some cases.

Please bear with me, there will be some code pasted here, as it is the only way I can describe what I'm doing.

I have two kinds of custom widgets in my project - the ones where there is only one instance of the widget, typically defined like this in the lib\modules directory:

article-widgets
    - views
    -    - widget.html
    - index.js

And then the kind of widgets that are repeated, and can be used in several places around the site, typically defined like this:

employees
    - index.js
employees-widgets
    - views
    -    - widget.html

This one I can make work:

In the first kind I define a rich text are in article-widgets\index.js

{
    name: 'ingress',
    label: 'Ingress',
    type: 'area',
    required: true,
    options: {
        widgets: {
            'apostrophe-rich-text': {
                toolbar: ['Bold', 'Italic', 'Link', 'Unlink' ]
            }
        }
    }
}

And then in article-widgets\views\widget.html

{{ apos.singleton(data.widget, 'ingress', 'apostrophe-rich-text',{
    toolbar: [ 'Bold', 'Italic', 'Link', 'Unlink' ]
}) }}

This one is not working for me:

In the second type - I can edit inline, but changes are not saved.

In employees\index.js

{
    name: 'body',
    label: 'Beskrivelse',
    type: 'area',
    options: {
        widgets: {
            'apostrophe-rich-text': {
                toolbar: ['Bold', 'Italic', 'Link', 'Unlink']
            }
        }
    }
}

And then in employees-widgets\views\widget.html

{% for piece in data.widget._pieces %}
    <div>
        {{
            apos.singleton(piece, 'body', 'apostrophe-rich-text', {
                toolbar: [ 'Bold', 'Italic', 'Link', 'Unlink' ]
            })
        }}
    </div>
{% endfor %}

I can't understand why the later is not working. Am I doing something wrong - or is inline editing of repeated items not possible?

回答1:

One of Apostrophe's subtleties is that any property beginning with an underscore (_) (except _id) is not actually part of the parent object and changes don't go back to the database

These are properties attached for convenience by Apostrophe somewhere in the retrieval process.

I don't thinkg modifying the piece from the widget is something baked in by default (typically piece-widgets are single-serving views for content) but it is possible to set up custom backend functionality.

Not a total 1:1 of your issue but if you look at the comments and comments-widgets module in this (rough) example, you can see we're modifying the piece's content via the widget.

https://github.com/stuartromanek/apostrophe-comment-system/tree/master/lib/modules