0

いくつかのフィルター プロパティを持つ ViewModel があります。

class IndexModel
    TermoBusca: ko.observable()

class ViewModel extends IndexModel
    Nome: ko.observable()
    Endereco: ko.observable()
    Contato: ko.observable()
    Responsaveis: ko.observableArray []
    ResponsaveisSelected: ko.observableArray []

URL OData を生成する算出プロパティ

@Url = ko.computed
    read: ->
        console.count "@Url:read called!"

        urlBase = "api/empresas?$expand=Teste"
        #return "#{urlBase}&#{@TermoBusca()}" if @TermoBusca() and @TermoBusca().indexOf("$filter") == 0

        group = []

        if @Nome()
            group.push "Name eq #{@Nome()}"

        if @Endereco()
            group.push "substringof('#{@Endereco()}', Endereco)"

        if @Contato()
            contatos = @Contato().split(/[\s,.]+/)
            group.push "(" + ko.utils.arrayMap(contatos, (nome) -> "substringof('#{nome}', Contato/Nome)").join(" or ") + ")"

        responsaveisSelected = ko.utils.unwrapObservable @ResponsaveisSelected()
        if responsaveisSelected and responsaveisSelected.length > 0
            group.push "(" + ko.utils.arrayMap(responsaveisSelected, (id) -> "Responsaveis/Id eq " + id ).join(" or ") + ")"

        if group.length > 0
            urlFilter = "$filter=#{group.join(' and ')}"
            #@TermoBusca urlFilter
            return "#{urlBase}?#{urlFilter}"
        urlBase
    owner: @
    deferEvaluation: true

考え方は単純です。ユーザーがフィルターを入力すると、OData URL が自動的に生成されます。

そしてその作品:https://c9.io/ridermansb/knockoutjsobservable/workspace/index.html

新機能

アイデアは、単一のテキスト フィールドを配置することであり、その中にフィルターを作成できます。

例: luciは名前と住所で検索します。次のような特殊文字を使用できます。@mikeは連絡先名を検索します。

このプロパティTermoBuscaは、ユーザーが検索を入力するテキスト フィールドであり、OData URL に変換されます。

しかし、私はそれを機能させることはできません!

完全なコードはhttps://c9.io/ridermansb/knockoutjsobservableにあります。

私はギットを使用しています!

支店長、プロパティを持っていませんTermoBusca!ブランチ *termo_busca* には、単一のテキスト フィールドの実装が含まれています。

このビデオを参照してください: http://screenr.com/AMj7

4

0 に答える 0