3

だから私がやろうとしているのは、HTTP get リクエストを作成し、そのレスポンスでビューを更新することです。何らかの理由で機能していません。これが私が持っているものです。

私はこの要点に従っています: https://gist.github.com/3443021

クライアントで:

Template.search.items = function() {
    var query = Session.get("query");
    console.log(query);
    var resp;
    Meteor.call("search", query, function(err, res) {
        console.log(res);
        //return res;
        return [1,2,4];
    });
};

サーバー上:

Meteor.methods({
    search: function(query) {
        var fut = new Future();
        // var onComplete = fut.resolver();

        Meteor.http.get("http://localhost:4242/autocomplete/"+query, function(err, res) {
            var content = res.content;
            var resp = JSON.parse(content);
            console.log(resp);
            fut.ret(resp)
        });
        return fut.wait();
    }
});

そして、私がやっているビューで:

<template name="search">
<h1>test</h1>
<table class="table table-hover">
<tbody>
  {{#each items}}
    {{> searchItem}}
  {{/each}}
</tbody>

Meteor.call 関数内から戻ると、ビューに何も送信されないようです。何か案は?

4

2 に答える 2

2

クライアントにはファイバーも何もなく、Meteor.call非同期であり、テンプレートはヘルパーから戻り値を取得しません。

ドキュメントから:

クライアントでは、コールバックを渡さず、スタブ内にいない場合、call は undefined を返し、メソッドの戻り値を取得する方法がありません。これは、クライアントにファイバーがないためです。そのため、メソッドのリモート実行をブロックする方法は実際にはありません。

コールバックを使用して、rendered変更後にテンプレートを手動で操作できます。

Template.search.rendered = function() {
  var query = Session.get("query"),
      table = this.find('.table-container');
  console.log(query);
  var resp;
  Meteor.call("search", query, function(err, res) {
    console.log(res);
    table.innerHTML = Template.search_items(res); // render the table with another template
  });
}
于 2012-11-11T19:30:00.360 に答える