0

这是“查询”对象

{
    id: 1,
    name: "Name of the user",
    query: "The query of the user",
}

这是“用户”对象

{
    name:'Name of User'
}

有很多用户,所以我创建了一个包含所有用户的数组和一个包含所有查询的数组

query_array=ko.observableArray([{//query},{//other query}])
user_array=ko.observableArray([{//user},{//other user}])

这是我的视图模型

var viewModel=function()
{
    var self=this;
    self.users=user_array;
    self.queries=query_array;
}

我的玉模板 index.jade

div.span12(data-bind='foreach:user')
    legend(data-bind="text:name")

这很好用......但我需要这个

div.span12(data-bind='foreach:users')
    legend(data-bind="text:name")
    div.span12(data-bind="foreach:queries")
        //if query name == user.name
        span(data-bind="text:query")
        br

我怎么能在淘汰赛中做到这一点

4

2 回答 2

1

我想保罗明白了。但由于我花时间在这个小提琴上,这里有一个使用嵌套绑定的替代解决方案。诀窍在于如何调用绑定。$data.name 是当前用户的名字,而 $root 指向视图模型的根。

<!-- ko foreach: $root.users -->
<p>
    <div data-bind="text:$data.name"></div>
    <ul data-bind="foreach: $root.queries">
        <li data-bind="visible: $data.name == $parent.name">
            <div data-bind="text: $data.query"></div>
        </li>
    </ul>
</p>
<!-- /ko -->
于 2013-06-23T22:28:10.960 回答
0

我会预处理您的查询数组,并向包含该用户查询的用户对象添加一个数组。像这样的东西:

var viewModel=function()
{
    var self=this;
    self.users=user_array;
    self.queries=query_array;

    for(var i = 0; i < self.users().length; i++)
    {
        var user = users()[i];
        var username = user.name.toLowerCase();
        user.queries = ko.observableArray(ko.utils.arrayFilter(self.queries(), function(query)
        {
            return query.name.toLowerCase() === username;
        }));
    }
}

您的 Jade 模板无需任何修改即可工作。

于 2013-06-23T22:20:36.240 回答