Firefox を 14.0.1 にアップグレードした後、jquery.tmpl はテキスト ボックスの値として「[object HTMLInputElement]」を表示し始めました。Firefox でデバッグした後、テンプレートで提供されているプロパティが定義されていないか、空の文字列が指定されている場合、グローバル スコープまで親スコープ チェーンで検索しようとしていることがわかりました。これは、「this.view」を使用してビューをリロードしようとしている場合にのみ発生します (ただし、更新中または新しいテンプレートの読み込み中はそうではありません)。たとえば、以下のようなテキスト ボックスがあるとします。
< input type="text" name="foo" id="foo" value="${foo}"/>
「foo」に空の文字列が指定されているか、コントローラによって指定されていない場合は、グローバル スコープで検索されます。入力テキストボックスオブジェクトを返す $('#foo') をトリガーしています。これで、このオブジェクトはテキスト ボックスの値としてレンダリングされるため、'[object HTMLInputElement]' がテキスト ボックスの値として表示されます。この動作は、最新の chrome バージョンでも見られます。入力要素のテンプレート プロパティ名または ID を変更して一致しないようにすると、正常に機能します。例えば
< input type="text" name="foo" id="foo1" value="${foo}"> -- this is working
< input type="text" name="foo" id="foo" value="${foo1}"/> --this is working
ただし、ID またはプロパティ名の変更は、アプリケーション全体にアクセスしてテンプレートを変更する必要があるため、コストのかかる操作です。200 を超えるテンプレート ファイルがあるため、これは非常に大きな影響です。
そこで、tmpl.js で 342 の関数 buildTmplFn を編集し、次のコードを変更しました。
.replace( /\$\{([^\}]*)\}/g, "{{= $1}}" ) --> Line1
.replace( /\$\{([^\}]*)\}/g, "{{= \$item\.data\.$1}}" ) -->Line2
問題を修正しました。 これにはライブラリ ファイルを編集する必要があるため (アップグレード中にメンテナンスが必要)、ライブラリを上書きする必要はなく、'buildTmplFn' 関数を上書きするだけで済む解決策を誰かが見つけたのではないかと思っています。
前もって感謝します!