如何将 Plone 内容模式字段中的值传递给 JQuery 函数?

How can I pass a value from a Plone content schema field into a JQuery function?

我有一个 Plone Dexterity 自定义类型对象,它使用 JQuery 函数来控制行为。在自定义类型中,我有一些字段允许用户在编辑内容对象时为行为(在本例中为简单的 RSS 提要)设置参数。

目前我将函数参数值直接硬编码到 JQuery 函数中。我希望能够在编辑时从自定义类型字段中获取值,并将它们传递到我的 JQuery 函数中(下面的示例)。

我该怎么做?

敏捷领域:

<field name="item_url" type="zope.schema.TextLine">
    <title>rss feed url</title>
    <description />
    <required />
</field>
<field name="item_count" type="zope.schema.TextLine">
    <title>item display number</title>
    <description />
    <required />
</field>
<field name="item_desc" type="zope.schema.Bool">
    <title>enable item description</title>
    <description />
    <required />
    <default>True</default>
    <form:widget type="z3c.form.browser.checkbox.SingleCheckBoxFieldWidget"/>
</field>

JQuery函数:

$(document).ready(function() {
    $('#divRss').FeedEk({
        FeedUrl: '[item_url]',
        MaxCount: [item_count],
        ShowDesc: [item_desc],
    });
});

JQuery 在我的 HTML 代码中查找特定对象 ID(在本例中为 'divRss')并写出代码以生成提要内容。所以在我的模板视图文件中,它看起来像这样:

<div id="tabs-feed-widget-patients" class="easytabs tab-container">

        <div id="divRss" />

</div>

由于您有适合您的类型的自定义视图页面模板,您可以通过在视图中添加 data 属性来实现。

我假设您的页面模板中有如下内容。

<div class="divRss">
    <div tal:content="context/item_url">Item url</div>
    <div tal:content="context/item_count">Item count</div>
    <div tal:content="context/item_desc">Item desc</div>
</div>

你可以通过数据属性来扩展它,你也可以把主题放在模板的其他地方(或者隐藏它们)

<div class="divRss">
    <div tal:define="url context/item_url"
         tal:attributes="data-url url"
         tal:content="url">Item url</div>

    <div tal:define="count context/item_count"
         tal:attributes="data-count count"
         tal:content="count">Item count</div>

    <div tal:define="desc context/item_desc"
         tal:attributes="data-desc desc"
         tal:content="desc">Item desc</div>

</div>

您的 JS 代码可能看起来像...

$(document).ready(function() {
    $('#divRss').FeedEk({
        FeedUrl: $('#divRss div').eq(0).data('url'),
        MaxCount: $('#divRss div').eq(1).data('count'),
        ShowDesc: $('#divRss div').eq(2).data('desc'),
    });
});

好吧,实施可以改进:-) 但这应该指向正确的方向。