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

时间:2015-01-21 13:13:56

标签: jquery plone

我有一个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”)并写出代码以生成feed内容。所以在我的模板视图文件中,它看起来像这样:

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

        <div id="divRss" />

</div>

1 个答案:

答案 0 :(得分:5)

由于您的类型具有自定义视图页面模板,因此您可以通过在视图中添加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'),
    });
});

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