rxjs - 单个可观察多个输入或每个输入可观察

时间:2017-07-12 00:37:32

标签: javascript rxjs

我想知道使用单个observable跟踪多个输入字段是否有任何负面原因。我这样做的唯一问题是我无法真正使用distinctUntilChanged,因为有些情况下文本可能会重叠,这意味着它不会触发

我的单个可观察的例子:

this.subscription = Rx.Observable.fromEvent($(joined), 'keyup')
        .pluck('target')
        .flatMap(target=>
             Rx.Observable.of(target.value)
             .filter( (text) => {
                  text = text.trim();
                  if (!text.length) // empty input field
                  {
                      this.setState({
                        list: {
                          company: [],
                          country: [],
                          state: [],
                          suburb: [],
                          street: []
                        }
                      });
                  }
                  return text.length > 0;
              })
              .map(response => ({
                  id: target.id.replace("_input", ""),
                  term: target.value
              }))
        )
        .debounceTime(200)
        .switchMap(r => this.search_type(r.term, r.id))
        .subscribe(
            /* some code */
        )

如果我只是坚持一个可观察的,或者我是否应该有一个可观察的每个输入,那会没用吗?

1 个答案:

答案 0 :(得分:0)

在我看来,这取决于具体情况。 假设我们有两个输入firstName,lastName。我希望能够在任何字段中进行搜索,因此如果您在firstName中输入'john'或在lastname中输入'john',则会产生相同的结果,这是正确的。

如果您想要不同的结果,那么您也可以转换您的查询添加输入源。这样,第一个查询参数将是{firstnameQuery: 'john'},第二个{lastnameQuery: 'john'},因为这两个不同,不会有任何问题。

如果每个输入都有不同的搜索触发器,那么就没有必要将它们组合在一起。