淘汰foreach

时间:2017-12-07 23:07:12

标签: knockout.js foreach where-clause

我想在淘汰赛中复制这个逻辑..有什么建议吗?当前代码是剃刀,我将其转换为使用knockoutJS

其中ItemStatus.Active在c#(后端)的枚举中为0

    @foreach (var employee in Employees.Where(x => x.Status == ItemStatus.Active))
{   
      <div class="someclass”>
      <span class="label">Name:</span>
      <span class="value">@employee.Name</span> 
    </div>
    }

我如何在淘汰赛中复制这种逻辑,即我只想展示目前活跃或就业的员工

谢谢

2 个答案:

答案 0 :(得分:1)

淘汰赛的SELECT f.proname, f.prosrc, f.probin -- trouble: f.prosrc and f.probin are empty FROM pg_proc f; computed可以解决问题。

尝试像这样的虚拟

pureComputed

和这样的标记

function VM(data) {
    var self = this;
    //.............
    self.filter = ko.observable(null);
    self.data = ko.observableArray(data)

    self.filteredData = ko.pureComputed(function(){ 
        return self.data().filter(function(x){
            return !self.filter() || x.status == self.filter();
        })
    });
    self.setFilter = function(filter) {
        self.filter(filter || null);
    }
    //.........................
}

这个小测试应用程序可以像这样初始化

<ul data-bind="foreach:filteredData">
    <li data-bind="text:$data.value">
    </li>
</ul>
<a href="#" data-bind="click:setFilter(null)">all</a>
<a href="#" data-bind="click:setFilter('active')">active</a>
<a href="#" data-bind="click:setFilter('archived')">archived</a>

请注意,如果您的数据数组是静态的(在页面生命周期期间不会发生任何更改),您可以从VM中省略var someData = [ {status: 'active', value: 'some active'}, {status: 'active', value: 'another active'}, {status: 'archived', value: 'some archived'}, {status: 'archived', value: 'another archived'}, ]; var vm = new VM(someData); ko.applyBindings(vm); vm.setFilter(null); 可观察数组,而只需使用self.data

答案 1 :(得分:0)

我会在我的视图模型中寻找一个数组滤镜来解决这个问题,其中包括:

var self = this;

self.Employees = ko.observableArray();
ko.uitls.arrayfilter(self.Employees(), function(e) { return e.Status == 'Active' });

通过将数组过滤器运用到计算函数并将其绑定到div,让它变得非常嗖嗖,有很多关于knockout网站的文档/教程可以帮助你解决这个问题。

Knockout Tutorial Website