在ng-repeat

时间:2016-04-12 10:35:13

标签: angularjs django

我有一个项目列表,每个项目都有一个复选框。用户选择一些项目,然后他可以通过键入查询来搜索其他项目,然后按“搜索”按钮进行POST。 我不想丢失之前选择的项目。因此,在我的视图中,我获取了存储在checkbxes值中的已检查项ID,然后将它们重新发送到模板。 问题是我使用ng-repeat而不是{%for%}来创建项目列表,因为我正在使用angularJS进行一些过滤任务,所以我无法知道当前项目的id是否存在于已检查的ID中在POST之后传递给模板的列表。

观看代码:

if 'btn_search' in request.POST:

        checked_ids = get_integers_from_checked_checkboxes(request, 'checkbox_parent')            
        search_query = request.POST['txtbox_search']            
        sub_queries = search_query.split(' ')

        for sub_query in sub_queries:

            items= all_items.filter(items__name__contains=sub_query)

        return render_to_response('my_page.html',
                              {'items': items,                                   
                               'checked_items' : checked_ids},
                              context_instance=RequestContext(request))

简化的模板代码:

<!-- Search  -->
<input type="text" name="txtbox_search">
<button name="btn_search"><b>Search</b></button>


<!-- Items' list  -->
<input type="text" ng-model="filter_Search_box" placeholder="Filter search">

<ul class="list">

<li ng-repeat="item in items | filter:filter_Search_box">
     <!-- This check box should be checked if the item.id is in {{checked_items}}  -->
    <input type="checkbox" value="{/item.id/}" name="checkbox_item"/>
    <b>{/item.name/} </b>
</li>

1 个答案:

答案 0 :(得分:1)

您应该考虑在angular和django应用之间使用ajax通信。所以你的django视图将返回json对象,它将由你的角度应用程序动态加载。你也可以用脏的方式实现它:

views.py

from django.core import serializers

if 'btn_search' in request.POST:

    checked_ids = get_integers_from_checked_checkboxes(request, 'checkbox_parent')
    search_query = request.POST['txtbox_search']
    sub_queries = search_query.split(' ')

    for sub_query in sub_queries:
        items = all_items.filter(items__name__contains=sub_query)
    items = serializers.serialize('json', items)
    return render_to_response('my_page.html',
            {
                'items': items,
                'checked_items': checked_ids
            },
            context_instance=RequestContext(request))

file_.html:

<script>
window.items = eval('(' + '{{ items }}' + ')');
</script>
角度控制器中的

初始化:

$scope.ang_items = window.items;

然后你就可以用ang_items进行ng-repeat。但我非常不推荐这个解决方案。 你的for循环(for sub_query in sub_queries:)也会在每次迭代时覆盖项目,这可能不是理想的事情。我建议您熟悉this