Sys.UI.DataView と JavaScript の問題
-
16-09-2019 - |
質問
Microsoft Ajax を使用して、JSON パケットを指定して連絡先のリストを動的に作成しています。私のコードは次のとおりです:
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> タグは連絡先を削除するスクリプトを起動するために使用され、2 番目のタグは 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」) を持つデータが表示されます。名前は正しく表示されますが、ID フィールドは 'rel' 属性で表示されず、'onclick' ステートメントは完全に削除されます。
これは MS Ajax の制限ですか、それとも私のやり方が間違っているのでしょうか?
前もって感謝します。
解決
属性は、それが全体の値でなければならない任意の{{}}の式を含むことがある場合。
はい: FOO = "{{ 'ABC' + ID}}"
はありません。 FOO = "ABC {{ID}}"
onclickのために生成されていないとして、、それはおそらくですが、どのような検査は、使用していることは、それがelement.onclickの直接の集合ではなく、addAttribute()で設定されているので、あなたに値が表示されません。
他のヒント
InfinitiesLoopは、右のトラックに私を置くので、ここで最終的な答えは、(場合には他の誰がこの経路をたどる)だ...
まず、私はMSのAjax 4.0以前のプレビューを使用していました。私は今、プレビュー5に更新した、と物事は少し異なる動作をします。ここでは、最終的なHTMLは(ジャバスクリプトが変更されません)です。
<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>
となり
<option sys:value="{{ Value }}">{{ Text }}</option>