Javascript 可观测性问题
我有一个带有一些过滤器属性的ViewModel:Javascript 可观测性问题,javascript,knockout.js,coffeescript,knockout-2.0,computed-observable,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 [] Responsavei
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
这个想法很简单。当用户输入过滤器时,ODataURL将自动生成
及其作品:
新功能
其想法是放置一个文本字段,您可以在其中创建过滤器:
例如:luci将按姓名和地址进行搜索。
可以使用特殊字符,例如:@mike将搜索联系人姓名
属性TermoBusca
是一个文本字段,用户在其中输入搜索结果并将其转换为OData Url
但是我不能让它工作
完整代码位于:
我在用git强>
分支主机,不具有属性TermoBusca
!
分支*termo_busca*包含单个文本字段的实现
看看这个维迪奥:什么东西不适合你?您获取的url错误,或者您没有从observable获取数据?有两种方法可以输入筛选器:1。在主分支中,只有“按字段筛选”选项。2.被植入分支termo_busca,可选择单场搜索。用户告诉过滤器。并将其转换为ODataURL(
url
property)。我的问题是,当部署单字段搜索时,此实现会破坏url。(不再生成!)此视频显示功能:来源: