Вызов нескольких представлений в запросе CouchApp - PullRequest
1 голос
/ 20 мая 2011

Мне нужно выполнить поиск в CouchDB на основе нескольких критериев, введенных в форму. Имя, массив тегов и так далее. Затем мне понадобятся различные представления для индексации этих полей. В конечном итоге все результаты будут собраны в data.js и предоставлены mustache.html. Скажем, есть 3 представления - docsByName, docsByTags, docsById.

Чего я не знаю, так это как запросить все эти представления в query.js. Можно ли это сделать и как?

Или подход должен заключаться в том, чтобы написать одно представление, которое каким-то образом создает несколько излучений для каждого поиска?

Спасибо.

1 Ответ

1 голос
/ 21 мая 2011

Из того, что вы говорите, я предполагаю, что вы используете В конце концов , поэтому я процитирую из В конце концов, учебник для начинающих :

Асинхронная функция является главной звездой, который в этом случае делает запрос Ajax (но он может делать все, что захочет).Еще одна важная вещь, на которую следует обратить внимание, это то, что первым аргументом асинхронной функции является обратный вызов, который вы используете, чтобы сообщить Evently, когда вы закончите с асинхронным действием.[...] Все, что вы передаете в функцию обратного вызова, становится первым элементом, переданным в функцию данных.

Короче говоря: поместите ваши запросы Ajax в async.js.

В качестве примечания: В конце концов, это только один из возможных вариантов написания коуч-приложения, и неясно, поддерживается ли оно.Однако это работает, и код легко изменить, чтобы он не использовался.

РЕДАКТИРОВАТЬ: Вот пример асинхронной функции (вырезать и вставить из старой программы):

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);
        }
      });
    }
  });
}
...