私は HandleBars JS を使用しようとしていますが、これまでのところほとんど機能しています。しかし、私は興味深い問題に遭遇しました。
3 つのテキスト フィールドを持つユーザー入力フォームをレンダリングするために HandleBars を取得しようとしています。テストのために、これら 3 つのテキスト フィールドを作成するために必要な JSON 文字列をドキュメントに貼り付けましたが、うまく機能しました。ただし、$.getJSON を使用し、テキスト フィールドをレンダリングするときに ajax を介してまったく同じ JSON 文字列を呼び出すと、CSS または jQuery ルールはフォームに適用されません。
静的文字列の周りに Document Ready を追加したため、この時点で Document Ready が呼び出されたことが原因であることがわかりましたが、CSS または JS ルールをレンダリングしなかったという同じことが起こりました。
すべての jQuery および CSS ルールを強制的に更新する方法はありますか? またはどうすればこれを機能させることができますか?
また、これはjQuery Mobileではないことに注意してください。
前もって感謝します..そして、反対票を投じる前に質問があるかどうか尋ねてください。
編集 - コードは次のとおりです。
静的バージョン
var source = $("#form-template").html();
var template = Handlebars.compile(source);
var data = {
info: { id: 'longbeach2012', name: 'Long Beach 2012' },
forms: [
{id: "1", label: "This is a label", description: "", type: "text", name: "t1", username: "alan" },
{id: "2", label: "This is a label2", description: "description2", type: "text", name: "t2", username: "allison" },
{id: "3", label: "This is a label3", description: "description3", type: "text", name: "t3", username: "ryan" }
]};
var example = {title: "Sample Title", body: "Sample Body"};
$("#testForm").html(template(data));
動的バージョン
$.getJSON('http://register.local.dev/fetchtemplate',
{
language: 'english',
formid: 'longbeach2012'
},
function(data) {
$.each(data, function(i,item){
if( item.elem_type === 'text' )
{
var source = $("#textinput-template").html();
var template = Handlebars.compile(source);
$("#testForm").append(template(item));
}
});
});
ハンドルバー テンプレート
<script id="textinput-template" type="text/x-handlebars-template">
<div id="q{{elem_id}}">
<div class="small">{{trans_label}}{{#if trans_description}}</br />
<span class="notice">{{trans_description}}</span>{{/if}}</div>
<input type="{{elem_type}}" name="{{elem_name}}" id="{{elem_name}}" value="{{trans_defaultValue}}" tabindex="1" autocomplete="off" />
</div>