2012-03-21 19 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

我做,而不是下面。

<span data-bind="foreach: admin.home.paging.pages"> 
     <span data-bind="html: $root.admin.home.paging.page(), visible: $data == $root.admin.home.paging.page()"></span> 
     <a href="#" data-bind="click: function() { $root.admin.home.searchByPage($data); }, html: $data, visible: $data != $root.admin.home.paging.page()"></a> 
    </span> 

回答

8

您的代碼使用jQuery TMPL但默認情況下擊倒使用其本地模板引擎。如果你想要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。例如

<!-- ko if: isSamePage() --> 

我會縮短你的對象層次有點過了,如果你能。另外,請考慮使用with塊。

如果您要遍歷admin.home.paging.pages,那麼該循環內的每個對象都是該對象層次結構的子對象。換句話說,你不必保持指定整個對象鏈。

+0

很好的答案@John Papa ...當然解決了我的問題 – Anirban 2012-05-08 19:02:03