2010-08-07 4 views
0

Pourquoi cet exemple échouer lorsque le XTemplate est construit en utilisant une chaîne entre guillemets, le même exemple fonctionne lorsque string est défini entre guillemets simples. Le code meurt en silenceXTemplate comportement étrange

var tplData = [{ // 1 
    color : "#FFE9E9", 
    name : 'Naomi White', 
    age : 25, 
    dob : '03/17/84', 
    cars : ['Jetta', 'Camry', 'S2000'] 
    },{ 
    color : "#E9E9FF", 
    name : 'John Smith', 
    age : 20, 
    dob : '10/20/89', 
    cars : ['Civic', 'Accord', 'Camry'] 
}]; 
var myTpl = new Ext.XTemplate(// 2 
    "<tpl for='.'>", // 3 
    "<div style='background-color: {color}; margin: 10px;'>", 
    "<b> Name :</b> {name}<br />", 
    "<b> Age :</b> {age}<br />", 
    "<b> DOB :</b> {dob}<br />", 
    "</div>", 
    "</tpl>" 
); 
myTpl.compile(); 
myTpl.append(document.body, tplData); 

Le même exemple avec des guillemets simples.

var tplData = [{ // 1 
    color : "#FFE9E9", 
    name : 'Naomi White', 
    age : 25, 
    dob : '03/17/84', 
    cars : ['Jetta', 'Camry', 'S2000'] 
    },{ 
    color : "#E9E9FF", 
    name : 'John Smith', 
    age : 20, 
    dob : '10/20/89', 
    cars : ['Civic', 'Accord', 'Camry'] 
}]; 
var myTpl = new Ext.XTemplate(// 2 
    '<tpl for=".">', // 3 
    '<div style="background-color: {color}; margin: 10px;">', 
    '<b> Name :</b> {name}<br />', 
    '<b> Age :</b> {age}<br />', 
    '<b> DOB :</b> {dob}<br />', 
    '</div>', 
    '</tpl>' 
); 
myTpl.compile(); 
myTpl.append(document.body, tplData);  

Répondre

2

Je suppose que ce ne dit pas explicitement que les doubles guillemets sont nécessaires aux opérateurs XTemplate, mais tous les exemples et la documentation de les utiliser et il est inférées. Cela devrait probablement être indiqué explicitement.

Le seul problème dans le premier bloc de code est la ligne "<tpl for='.'>",. Les guillemets sont obligatoires dans les opérateurs, donc si vous préférez utiliser des guillemets autour de vos chaînes de gabarit, vous devez échapper tous les opérateurs comme ceci: "<tpl for=\".\">", Ou utilisez simplement des guillemets simples pour vous faciliter la vie.

BTW, vous pouvez vérifier que cela est une exigence en regardant le code XTemplate:

nameRe = /^<tpl\b[^>]*?for="(.*?)"/, 

Comme vous pouvez le voir, le regex attend explicitement un opérateur for double cité.