2015-09-18 6 views
9

Ich beginne mit Meteor und möchte meine Methoden organisieren ... Zum Beispiel habe ich 2 Sammlungen: 'a' und 'b', beide haben die Einfügemethode .. Ich möchte etwas tun:Kann ich Methoden in Meteor gruppieren?

Meteor.methods({ 
    a: { 
     insert : function(){ 
      console.log("insert in Collection a"); 
     } 
     }, 
    b: { 
     insert : function(){ 
      console.log("insert in Collection b"); 
     } 
     } 
}); 

Und dann rufen Sie
Meteor.call('a.insert');

Es ist möglich, dies zu tun? Oder wie kann ich meine Methoden organisieren?

Ich will nicht Methoden machen wie: 'INSERTA' und 'insertB'

Antwort

6

Sie können diese Syntax verwenden:

Meteor.methods({ 
    "a.insert": function(){ 
    console.log("insert in Collection a"); 
    } 
    "b.insert": function(){ 
    console.log("insert in Collection b"); 
    } 
}); 

Welche Sie Meteor.call("a.insert"); tun können.

+0

Dies ist der Stil, den wir zur Zeit bei Edthena verwenden. Ich habe auch gesehen, dass "a/insert" mehr wie eine URL ist. Es ist nur eine Frage der Präferenz. –

+0

das ist was ich auch tue, es ist ziemlich praktisch. Sie können auch mehrere Meteor-Hooks haben und diese werden sich weiter ausdehnen – corvid

5

Aufbauend auf der Idee von saimeunt können Sie Ihrem Code auch eine Hilfsfunktion hinzufügen, wenn Sie sich mit der Eleganz dieser Gruppen in Ihrem Code befassen. Dann können Sie die Notation Ihnen gefallen hat und sogar Nest Gruppen willkürlich:

var methods = { 
    a: { 
     insert : function(){ 
      console.log("insert in Collection a"); 
     } 
    }, 
    b: { 
     insert : function(){ 
      console.log("insert in Collection b"); 
     }, 
     b2: { 
      other2: function() { 
       console.log("other2"); 
      }, 
      other3: function() { 
       console.log("other3"); 
      } 
     } 
    }, 
}; 

function flatten(x, prefix, agg) { 
    if (typeof(x) == "function") { 
     agg[prefix] = x; 
    } else { 
     // x is a (sub-)group 
     _.each(x, function(sub, name) { 
      flatten(sub, prefix + (prefix.length > 0 ? "." : "") + name, agg); 
     }); 
    } 
    return agg; 
} 

Meteor.methods(flatten(methods, "", {})); 

Sie würden dann mit der Punktnotation nennen, wie:

Meteor.call('b.b2.other2'); 
Verwandte Themen