我有一个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>
答案 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'),
});
});
那么实施可以改进:-) 但这应该指向正确的方向。