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