0

给定一个 json 数据包,我正在使用 Microsoft Ajax 动态填充联系人列表。我的代码如下:

function fillContactsFromData(contacts) {
    // this is just for debug to let me know that the data is correct
    if (contacts.length > 0) {
        alert('ID: ' + contacts[0].ID + ', Name: ' + contacts[0].Name);
    }

    $create(Sys.UI.DataView, { data: contacts }, null, null, $get('contacts'));
}

相关的html如下:

<div id="contacts" class="sys-template">
    <a onclick="removeContact('{{ ID }}');"><img src="remove.png" /></a>
    <a class="contact" rel="/Contacts/Index/{{ ID }}">{{ Name }}</a><br />
</div>

第一个 <a> 标记用于触发脚本以删除联系人,而第二个标记使用 jQuery 线索提示在悬停时显示一个框(此处跳过详细信息)。

我遇到的问题是 HTML 没有正确呈现。正在生成的是:

<div id="contacts">
    <a><img src="remove.png" /></a>
    <a class="contact" rel="/Contacts/Index/{{ ID }}">Darren Oster</a><br />
</div>

警告框指示具有有效 ID(Guid)和名称(“Darren Oster”)的数据。Name 被正确呈现,但 ID 字段未呈现在“rel”属性中,并且“onclick”语句被完全删除。

这是 MS Ajax 的限制还是我做错了什么?

提前致谢。

4

2 回答 2

1

如果一个属性要包含任何 {{ }} 表达式,它必须是整个值。

是: foo="{{ 'abc' + ID }}"

否: foo="abc{{ ID }}"

至于未生成 onclick,它可能是,但是您使用的任何检查都不会显示该值,因为它是使用直接设置的 element.onclick,而不是 addAttribute()。

于 2009-09-24T01:25:52.650 回答
0

InfinitiesLoop 让我走上了正确的轨道,所以这是最终答案(以防其他人遵循这条道路)......

首先,我使用的是早期的 MS Ajax 4.0 预览版。我现在已经更新到预览版 5,而且工作方式略有不同。这是最终的 HTML(javascript 未更改):

<div id="contacts" class="sys-template">
    <a sys:onclick="{{ 'removeContact(\'' + ID + '\');' }}"><img src="remove.png" /></a>
    <a class="contact" sys:rel="{{ '/Contacts/Index/' + ID }}">{{ Name }}</a><br />
</div>

另请注意,预览版 5 需要在任何具有数据绑定值的属性上添加“sys:”前缀,因此

<option value="{{ Value }}">{{ Text }}</option>

在 <select> 内变成

<option sys:value="{{ Value }}">{{ Text }}</option>
于 2009-09-24T02:00:21.873 回答