在 CouchApp 查询中调用多个视图

Posted

技术标签:

【中文标题】在 CouchApp 查询中调用多个视图【英文标题】:Calling multiple views in CouchApp query 【发布时间】:2011-05-20 15:18:51 【问题描述】:

我需要根据表单中输入的几个条件来搜索 CouchDB。名称、标签数组等。然后我需要各种视图来索引这些字段。最终,所有结果都将在 data.js 中进行整理并提供给 mustache.html。假设有 3 个视图 - docsByName、docsByTags、docsById。

我不知道的是,如何在 query.js 中查询所有这些视图。这可以做到吗?如何做到?

或者该方法应该是编写一个视图,以某种方式为每个搜索生成多个发射?

谢谢。

【问题讨论】:

【参考方案1】:

从你所说的我假设你正在使用Evently,所以我将引用Evently primer:

async 函数是主要的明星,在这种情况下它发出一个 Ajax 请求(但它可以做任何它想做的事情)。另一个需要注意的重要事情是,异步函数的第一个参数是一个回调,当您完成异步操作时,您可以使用它来告诉 Evently。 [...] 传递给回调函数的任何内容都将成为传递给数据函数的第一项。

简而言之:将您的 Ajax 请求放入 async.js

附带说明:Evently 只是编写 couchapp 的可能选择之一,尚不清楚它是否被维护。但是它可以工作,并且很容易重新排列代码以不使用它。

编辑:这是一个示例异步函数(从旧程序中剪切和粘贴):

function(cb, e) 
  var app = $$(this).app
    ;
  app.db.openDoc('SOMEDOCID', 
    error: function(code, error, reason) 
      alert("Error("+code+" "+error+"): "+reason);
    
  , success: function(doc) 
      app.view('SOMEVIEWNAME', 
        include_docs: true
      , error: function(code, error, reason) 
          alert("Error("+code+" "+error+"): "+reason);
        
      , success: function(resp) 
          resp.doc = doc;
          cb(resp);
        
      );
    
  );

【讨论】:

感谢您的有用提示。我错过了提及,是的,我在整个事情上都在使用事件和一个完全的新手。由于 async.js 让我开始遇到麻烦,所以我尝试了一种不同的方法并找到了适合我的方法。 我现在正在做的是 - 对我的“表单”上的所有文本字段使用部分字符串进行多次发射,分别发射所有标签。现在查询中的键是所有字段值(字符串)和选定标签的数组(我的应用程序只允许选择标签)。我按要求得到结果。例如。所有具有 city = 'rado'(部分文本)、标签 =['a'、'b']、docId = 'myDocId' 的文档。现在获取的文件包括那些具有科罗拉多州或任何与该模式匹配的文件。不过,对于大量数据,我不知道这对性能意味着什么:( 话虽如此,您能否对 async.js 的执行方式多加说明?我不知道如何在 $.ajax() 中指定 url。对于我拥有的所有观点,我应该多次调用它吗?任何想法都会让我领先一步。谢谢。 非常感谢,帮了大忙! 不客气。如果您真的觉得我的回答有用,请记得投票。

以上是关于在 CouchApp 查询中调用多个视图的主要内容,如果未能解决你的问题,请参考以下文章

Couchapp 在查询视图时返回 304

今天 CouchApp 框架都有哪些可能性?

Couchapp,Jquery:意外的标识符

CouchApp 无法从视图中检索键/值对,但 Futon 可以

避免在 Oracle 过程中频繁调用同一视图

在 CouchApp 视图中将参数传递给 map.js