可观察财产的问题

时间:2013-05-12 16:02:31

标签: javascript knockout.js coffeescript knockout-2.0 computed-observable

我有一个带有一些过滤器属性的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网址。

但我不能让它发挥作用!

完整的代码位于:https://c9.io/ridermansb/knockoutjsobservable

我正在使用git!

分支,没有属性TermoBusca! 分支* termo_busca *包含单个文本字段的实现。

见vídeo:http://screenr.com/AMj7

0 个答案:

没有答案