0

サーバー ブロックからクライアント ブロックにデータを渡すことができません。また、自分で作成したパッケージと呼ぶ方法が正しいか間違っているかもわかりません。ここに私のフォルダ構造があります:

x/packages/me.js
x/packages/package.js
x/packages/smart.json
x/x.css
x/x.html
x/x.js 

すべてのコードは次のとおりです。

me.js

Meteor.methods({
getTweets: function () {
var key = "my api key";
var response = Meteor.http.call( "POST", "http://localhost:8000/users.json",
{ params: { appkey: key ,uid: "example" }});
return response.content;
}
});

package.js

Package.describe({
summary: "summary etc"
});

Package.on_use(function (api){
api.use(["http"],["server"]);

api.add_files("me.js","server");
});

smart.json

{
"name": "name example",
"description": "desc",
"homepage":"as",
"author" : "xyz",
"version" : "0.1",
"packages": {}
}

x.html

<head>
<title>x</title>
</head>

<body>
{{> hello}}
</body>

<template name="hello">
<h1>Hello World!</h1>
{{greeting}}
<input type="button" value="Click" />
</template>

x.js

if (Meteor.isClient) {
Template.hello.greeting = function () {
return "Welcome to y.";
};

Template.hello.events({
'click input' : function () {
// template data, if any, is available in 'this'
Meteor.call("hiren",function (err, data) {
console.log(data);
if(err) throw err;
});
}
});
}

if (Meteor.isServer) {
Meteor.call("getTweets",function (err, data) {
Meteor.methods({
"hiren":function(){
return data;
}
});
});
}

「クリック」ボタンをクリックすると、未定義と表示されます

4

1 に答える 1

1

ここに 1 つの問題があります。

if (Meteor.isServer) {
  Meteor.call("getTweets",function (err, data) {
    Meteor.methods({
      "hiren": function(){
        return data;
      },
    });
  });
}

メソッドのコールバック関数内でメソッドを定義しますgetTweets。これはおそらくやりたいことではありません。通常、予測可能な API が必要なため、これらはサーバー ブロックで正しく定義されます。あなたがしたようなことをする理由は思いつきませんが、たとえあったとしても、あなたはgetTweets関数を呼び出しませんでした。だから間違いだと思います。

于 2013-11-14T14:51:05.837 に答える