John Resigs微型模板引擎,如何处理选择的问题?

时间:2009-02-23 07:02:14

标签: javascript jquery templating

我有一个看起来像这样的模板:

<script type="text/html" id="TemplateEdit">

    <td>
        <input type="hidden" value="<#= item.ID #>" id="Edit.ID" name="Edit.ID" />
        <select id="Edit_ClientID" name="Edit.ClientID">
            <option value="1">test</option>
            <option value="2">test 2</option>
            <option value="3">test 3</option>
        </select>
    </td>
    <td>
        <select id="Edit_Frequency" name="Edit.Frequency">
            <option value="1">Daily</option>
            <option value="2">Weekly</option>
            <option value="3">Fortnightly</option>
        </select>
    </td>
</script>         

在我传入的“item”对象中,它有一些属性,例如item.ClientID和item.Frequency。

一个通用函数处理吸入模板并注入它:

var template = tmpl(editTemplate, { item: data }); // this runs jresig's template code
domEle.append(template); //append the results in

理论上,在运行此代码后,我可以执行以下操作:

$("#Edit_ClientID").val(data.ClientID);

但是我不想用这个模板练习特有的代码来加重这个模板功能。这个特殊的函数处理整个站点的模板,我需要保持它的通用性。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

你可以在那里写正常的javascript,所以如果我理解你的问题,你可以这样做:

<script type="text/html" id="TemplateEdit">

    <td>
        <input type="hidden" value="<#= item.ID #>" id="Edit.ID" name="Edit.ID" />
        <select id="Edit_ClientID" name="Edit.ClientID">
            <option value="1" <# if(data.ClientID == 1){ #> selected <# } #>>test</option>
            <option value="2"<# if(data.ClientID == 2){ #> selected <# } #>>test 2</option>
            <option value="3"<# if(data.ClientID == 3){ #> selected <# } #>>test 3</option>
        </select>
    </td>
    <td>
        <select id="Edit_Frequency" name="Edit.Frequency">
            <option value="1">Daily</option>
            <option value="2">Weekly</option>
            <option value="3">Fortnightly</option>
        </select>
    </td>
</script>

对于可执行的javascript,请使用&lt; ##&gt;而不是&lt;#=#&gt;

答案 1 :(得分:0)

为什么不通过&lt; Options&gt;的整个列表?作为模板参数?不一定是最优雅的......但是它会避免在模板中添加条件逻辑(即“这个项目是当前选择的项目吗?是输出”选中“,没有输出)。