1

私はノックアウト プロジェクトでテンプレート システムをセットアップしています。目標はいつでも関数 loadTemplate("templateName") を呼び出して、新しいテンプレートをビューにロードできるようにすることです。

loadHomeTemplate()orを呼び出すことができるバージョンが動作しており、動作しloadSearchTemplate()ます。

JSフィドルリンク

loadTemplate("Home")しかし、今はorを呼び出せるように変更しようとしていますloadTemplate("Search")

JSフィドルリンク

何らかの理由で 2 番目のバージョンが壊れthis.name = ko.observable(name);ます。this.name は未定義です - エラーを確認するためにコンソール ログを追加しました。理解できません。どちらの場合も、buildTemplate の「name」パラメーターに同じものを渡しているようです。いいえ?

いくつかのメモ:複数のビュー モデルを実行しているため、そのように 'template-content' 要素にバインドしています。メソッドをいつでも実行できるようにする必要があるため、loadTemplateorをグローバルとして宣言しています。loadHomeTemplateもっといい方法があるのか​​もしれませんが、まだ思いつきません。

4

1 に答える 1

1

主な問題は、選択したテンプレートのホルダーとして初期化されるため、でbuildTemplate使用する必要があることでした。newこの修正により、への不適切なアクセスが解決されnameます。

self.currentTemplate(new buildTemplate(name, templateData));

私のフォークではtemplateFactory、すべての特定のテンプレートのコンストラクター内に保持するオブジェクトも作成しました。これにより、適切なコンストラクターの検索が簡単かつ確実になります。

http://jsfiddle.net/AvYY4/1/

于 2013-03-14T21:10:09.950 に答える