この質問は賛成票を投じたばかりなので、私がしたことで質問を更新できます
ウィンドウオブジェクト(またはユーザー指定のオブジェクトルート)を繰り返し処理することで解決し、正しいインスタンスが見つかったら、バックトラックしてインデックスから名前を取得しました。最終的な解決策はここにあります
https://github.com/AndersMalmgren/Knockout.BindingConventions
更新終了
KnockoutJS / MVC の構成テンプレート ソース エンジンに関する規則を作成する予定です。私は小さなクライアント側の POC から始めて、すぐにショー ストッパーに遭遇しました。
私の計画は、この構文または類似のものを使用することです
MyApp.EditCustomersViewModel = function() {
ko.templates.loadView(this);
};
これを行うと、オブジェクト名をキーとして使用して、tamplate キャッシュをチェックするか、サーバーからテンプレートをフェッチします。問題は、プロトタイプオブジェクトの名前を取得できないことです。これを試しました
Object.prototype.getName = function() {
var funcNameRegex = /function (.{1,})\(/;
var results = (funcNameRegex).exec((this).constructor.toString());
return (results && results.length > 1) ? results[1] : "";
};
このように定義されたオブジェクトで機能する場合
function MyClass() {
}
上記のオブジェクトにプロトタイプを追加すると機能しないか、このように定義すると
MyApp = {};
MyApp.MyClass = function() {
};
プロトタイプとスコーピングは 2 つの必須事項なので、これはショーストッパーです。何かアイデアはありますか?
フィドル: http://jsfiddle.net/aRWLA/
編集:これの背景は次のとおりです。
サーバー上には、このような構造があります
- Templates\ [ViewName]\index.html
- Templates\ [ViewName]\sub-model-template.html
あなたがするクライアントで
MyApp.EditCustomersViewModel = function() {
ko.templates.loadView(this);
};
オブジェクト名をキーとして ajax リクエストを生成し、問題のビューのすべてのテンプレートを取得します