كيفية الحصول على نيزك.دعوة لإرجاع قيمة القالب?

StackOverflow https://stackoverflow.com//questions/10677491

  •  12-12-2019
  •  | 
  •  

سؤال

لقد حاولت لفهم هذا المنشور بخصوص هذا المفهوم, ، ومع ذلك ، أنا فشلت في الحصول عليه.لدي الإعداد البسيط التالي:

/server/test.js
Meteor.methods({ 
  abc: function() {
    var result = {};
    result.foo = "Hello ";
    result.bar = "World!";
    return result;
  }
});

/client/myapp.js
var q = Meteor.call('abc');
console.log(q);

يعود هذا الهيكل إلى وحدة التحكم undefined.

إذا قمت بتغيير myapp.js ملف إلى:

Meteor.call('abc', function(err, data) {
  !err ? console.log(data) : console.log(err);
}

أتلقى Object في وحدة التحكم الخاصة بي.

من الناحية المثالية ، هذا ما أود أن أكون قادرا على القيام به ، لكنه لا يعمل ، موضحا في وحدة التحكم: Cannot read property 'greeting' of undefined

/client/myapp.js
var q = Meteor.call('abc');

Template.hello.greeting = function() {
   return q.foo;
}

أي مساعدة في تمرير البيانات من كائن الخادم إلى القالب سيكون موضع تقدير كبير.ما زلت أتعلم جافا سكريبت ونيزك.

شكراً!

هل كانت مفيدة؟

المحلول

من عند ال Meteor.call الوثائق:

على العميل ، إذا لم تجتاز رد اتصال ولم تكن داخل كعب ، فستعود المكالمة غير محددة ، ولن يكون لديك أي طريقة للحصول على قيمة الإرجاع للطريقة.وذلك لأن العميل ليس لديه ألياف ، لذلك ليس هناك في الواقع أي طريقة يمكن أن تمنع على التنفيذ عن بعد لطريقة.

لذلك ، سترغب في القيام بذلك على النحو التالي:

Meteor.call('abc', function(err, data) {
  if (err)
    console.log(err);

  Session.set('q', data);
});

Template.hello.greeting = function() {
  return Session.get('q').foo;
};

سيؤدي هذا إلى تحديث القالب بشكل تفاعلي بمجرد توفر البيانات.

نصائح أخرى

يحدث هذا بسبب Npm.require لديه سلوك غير متزامن.هذا هو السبب في أن لديك لكتابة رد ل Meteor.call.

ولكن هناك حل ، مجرد استخدام install(mrt add npm) وستحصل على وظيفة اسمه Meteor.sync(//...) مع هذا يمكنك أن تفعل كل من الألعاب:المزامنة والتزامن في الخاص بك Meteor.call().

المرجع: http://www.sitepoint.com/create-a-meteor-app-using-npm-module/

يمكنك الحصول على قيمة الإرجاع لطريقة النيزك لاستخدامها في قالب باستخدام متغير تفاعلي.تحقق من مظاهرة العمل على نيزك

ذهبت لحل غيتو.لكن, يعمل بالنسبة لي, وهو ما يهم, لي.أدناه هو رمز بلدي ، والتي ، في مفهوم ، أعتقد ، يحل مشكلة أوب.

في العميل الرئيسي.شبيبة:

Meteor.setInterval(function() {
    confirmLogin();

}, 5000); 

يؤدي هذا إلى تشغيل وظيفة تسجيل الدخول() كل خمس ثوان.

وظيفة كونفيرملوجين (في العميل الرئيسي.شبيبة):

function confirmLogin() {
    Meteor.call('loggedIn', function (error, result) {
        Session.set("loggedIn", result);
    });

}

طريقة تسجيل الدخول (في الخادم الرئيسي.شبيبة):

loggedIn: function () {
    var toReturn = false;
    var userDetails = Meteor.user();
    if (typeof userDetails["services"] !== "undefined") {
        if (typeof userDetails["services"]["facebook"] != "undefined") {
            toReturn = true;
        }
    }

    return toReturn;
},

المساعد ذات الصلة:

loggedIn: function () {
    return Session.get("loggedIn");
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top