2013-08-03 2 views
0

У меня есть источник данных с фильтром, применяемым к нему. Когда я включаю фильтр для поиска списка, он уничтожает исходный фильтр на источнике данных. Как я могу найти его для поиска в пределах отфильтрованного подмножества данных?Поиск в ListView ListView не работает должным образом с отфильтрованными данными

Вот проблема в действии: http://jsfiddle.net/KS7dB/. Он фильтруется с помощью {b: "2B"}. Начните ввод «ds» в поиске и вытрите фильтр и начните поиск всего, а не только отфильтрованное подмножество. Любая идея о том, как исправить это поведение?

var ds1 = new kendo.data.DataSource({ 
    data: [{ 
     stagename: "ds1 A", 
     b: "1b" 
    }, { 
     stagename: "ds1 B", 
     b: "2b" 
    }, { 
     stagename: "ds1 C", 
     b: "2b" 
    }, { 
     stagename: "ds1 D", 
     b: "2c" 
    }, { 
     stagename: "ds1 E", 
     b: "2c" 
    }], 
    filter: { 
     field: 'b', 
     operator: 'eq', 
     value: '2b' 
    } 
}); 

$("#stages_listview").kendoMobileListView({ 
    dataSource: ds1, 
    template: $("#stages_listview_template1").html(), 
    filterable: { 
     field: 'stagename', 
     operator: 'contains', 
     ignoreCase: true 
    } 
}); 

ответ

1

я провел некоторое время копаться в этом и проблема заключается в том, что как только вы создаете фильтр на вашем ListView, на практике, что является фильтр на подчеркивание источника данных, они не являются двумя отдельными накопительные фильтры. Поэтому поведение, которое вы наблюдали, кажется правильным.

Работа вокруг вариантов:

  1. переопределение функция фильтра на источнике данных, так что принимает аргумент переданного ему через ListView и всегда добавлять источник данных по умолчанию фильтра. Что-то рядом с этими линиями. Я должен признать, что я не удалось создать окончательное и функциональное решение.

    lw.dataSource.filter = function() { 
    arguments[arguments.length]= { field: "b", operator: "eq", value: "2b" }; 
    arguments.length += 1; 
    var result = lw.dataSource.originalfilter.apply(this, arguments); 
    return result; 
    

    }

  2. стороне сервера фильтр