Pourquoi ne puis-je prolonger la poche de tout le monde dans nowjs?
-
28-10-2019 - |
Question
Je suis en train de fournir des fonctions dans le pocket
de chacun des nowjs. Je voudrais le faire en _.extend
ing la poche de tout le monde, à savoir everyone.now
. Pour une raison que je ne comprends pas, _.extend
ne fournit pas correctement la fonction du côté client.
Ceci est mon code actuel:
var _ = require("underscore"),
everyone = require("nowjs").initialize(app);
everyone.now.foo = function() {};
_.extend(everyone.now, {
bar: function() {}
});
console.log(everyone.now.foo); // [Function]
console.log(everyone.now.bar); // undefined
Sur les deux côtés serveur et client, je peux faire now.foo()
très bien. D'autre part, now.bar()
échoue parce que now.bar
n'est pas défini. Tel est le cas aussi bien du côté client et serveur. J'ai essayé de vérifier l'existence du côté serveur, comme indiqué ci-dessus sur la dernière ligne. Cependant, cette ligne enregistre undefined
.
La fonction extend
(évidemment) de Souligné fonctionne sur d'autres objets, donc je suppose qu'il a quelque chose à voir avec le « espace de nom magique » qui utilise des nowjs.
Comment s'étendre ne fonctionne pas avec everyone.now
et comment puis-je obtenir au travail?
Edit 2: Je creusa un peu plus dans les procurations. Il semble que définir une propriété sur un proxy en passant une variable comme son nom ne fonctionne pas. J'ai enlevé mon premier montage parce que ce testcase est plus rétréci vers le bas.
Pourquoi cela ne fonctionne pas? Est-ce un bug? (La plupart du temps je demande moi-même, je sais que ce n'est pas, mais ce qui est vraiment me fait désemparés ...)
var proxy = Proxy.create({
get: function(pr, name) {
console.log("get called");
return null;
},
set: function(pr, name, value) {
console.log("set called");
}
});
var key = "foo";
proxy["foo"] = "bar";
proxy[ key ] = "bar";
proxy["foo"];
proxy[ key ];
Résultat Log:
set called
get called
get called
Apparemment, proxy[ key ] = "bar";
ne provoque pas set
à appeler sur le proxy. Pourquoi?
La solution
posté une entrée de blog sur le site de NowJS sur la façon de utilisation node-proxy
sous Windows, au lieu de la mise en œuvre du V8 natif en utilisant le drapeau --harmony_proxies
.
Il est apparu que la version V8 utilise actuellement ce nœud contient plusieurs bugs en ce qui concerne les procurations, qui étaient à l'origine du comportement bizarre comme indiqué dans la question. node-proxy
, cependant, est un module qui permet proxies (le noyau du "espace magique" de NowJS) sans ces bugs. (Les bugs sont corrigés dans une version plus récente de V8 ainsi, mais cela nécessiterait une version personnalisée du nœud.)
je ne pouvais comprendre comment construire node-proxy
sous Windows (c'est un addon .node
, pas un pur JavaScript). Dans le blog ci-dessus ils ont distribué le module compilé, et tout fonctionne maintenant comme un charme.
Pour résoudre:
- Télécharger le module compilé
- Extraire le dossier dans le dossier
node_modules
et renommez-le ànow
- Ne pas exécuter nœud avec le drapeau proxy
Modifier Noeud 0.7.0 utilisations V8 3.8.6 qui résout également ce problème. Il suffit de courir avec le drapeau --harmony
et de supprimer la référence à node-proxy
.