2012-03-21 7 views
2

下記の条件は、knockout.js 2.0のデフォルトテンプレートでは動作しません。 IF文を書き出すだけです。条件付きロジックは、デフォルトのknockout.js 2.0テンプレートエンジンで動作しますか?

<span data-bind="foreach: admin.home.paging.pages"> 
     {{if $data == app.viewModel.admin.home.paging.page()}} 
     <span data-bind="html: $data"></span> 
     {{else}} 
     <a href="#" data-bind="click: app.viewModel.admin.home.paging.searchByPage($data), html: $data"></a> 
     {{/if}} 

    </span> 

UPDATE

私が代わりに次のでした。

答えて

8

あなたのコードはjquery tmplを使用していますが、デフォルトではKnockoutはネイティブテンプレートエンジンを使用しています。 jquery tmplが必要な場合は、ネイティブエンジンをオーバーライドする必要があります。あなたはネイティブエンジンをしたい場合は、使用できるネイティブテンプレートに結合場合:しかし

<span data-bind="foreach: admin.home.paging.pages"> 
     <!-- ko if: $data === app.viewModel.admin.home.paging.page() --> 
      <span data-bind="html: $data"></span> 
     <!-- /ko --> 
     <!-- ko if: $data !== app.viewModel.admin.home.paging.page() --> 
      <a href="#" data-bind="click: app.viewModel.admin.home.paging.searchByPage($data), html: $data"></a> 
     <!-- /ko --> 
</span> 

、私もいくつかの変更をお勧めします。私はあなたのHTMLからロジックを抽象化し、あなたのviewmodelで関数を作成して評価を行い、true/falseを返します。たとえば、

可能であれば、私はオブジェクト階層も短くします。また、withブロックの使用を検討してください。

admin.home.paging.pagesを反復処理する場合、そのループ内の各オブジェクトはそのオブジェクト階層の子になります。つまり、オブジェクトチェーン全体を指定し続ける必要はありません。

+0

偉大な答え@ジョンパパ...確かに私の問題を解決 – Anirban

関連する問題