9

Sto provando a fornire funzioni in tutti gli pocket di nowjs. Mi piacerebbe farlo da _.extend in tasca a tutti, cioè everyone.now. Per qualche motivo che non riesco a capire, _.extend non riesce a fornire correttamente la funzione sul lato client.Perché non riesco a estendere la tasca di tutti in nowjs?

Questo è il mio codice corrente:

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 

Su entrambi i lati client e server, posso fare now.foo() bene. D'altra parte, now.bar() non riesce perché now.bar non è definito. Questo è il caso su entrambi i lati client e server. Ho provato a verificare la presenza sul lato server, come mostrato sopra sull'ultima riga. Tuttavia, questa linea registra undefined.

La funzione di Underscore extend (ovviamente) funziona su altri oggetti, quindi suppongo che abbia qualcosa a che fare con il "magico spazio dei nomi" utilizzato da nowjs.

Come mai l'estensione non funziona con everyone.now e come posso farlo funzionare?


Edit 2: ho fatta una buca un po 'più nel proxy. Sembra come impostare una proprietà su un proxy passando una variabile in quanto il suo nome non funziona. Ho rimosso la mia prima modifica perché questo testcase è più ristretto.

Perché non funziona? è un insetto? (La maggior parte delle volte mi chiedo io stesso so che non è, ma questo è davvero mi fa all'oscuro ...) risultato

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 ]; 

Log:

set called 
get called 
get called 

A quanto pare, proxy[ key ] = "bar"; non causa set da chiamare sul proxy. Perché?

+0

L'esecuzione della stessa cosa sul mio sistema ottiene il risultato previsto di due chiamate a ciascuna funzione. Quale versione di nodo e nodo-proxy hai? – loganfsmyth

+0

@Logan F. Smyth: Sto correndo sul nodo 0.6.5 che è uscito ieri. Sto eseguendo il nodo con il flag '--harmony_proxies', quindi non ho bisogno della libreria di terze parti. Potrebbe essere che l'implementazione di V8 contenga bug al momento mentre il nodo-proxy no. Lo controllerò, grazie. – pimvdb

risposta

0

Sono posted a blog entry sul sito Web di NowJS su come utilizzare node-proxy su Windows, anziché l'implementazione nativa V8 utilizzando il flag --harmony_proxies.

Sembrava che la versione V8 attualmente utilizzata da Nodo contenga diversi bug riguardo ai proxy, che causavano il comportamento strano come delineato nella domanda. node-proxy, tuttavia, è un modulo che abilita i proxy (il nucleo del "magico spazio dei nomi" di NowJS) senza errori. (I bug sono stati corretti in una versione più recente del V8 pure, ma che richiederebbe un generazione personalizzata del Nodo.)

io proprio non riuscivo a capire come costruire node-proxy su Windows (si tratta di un addon .node, non un puro JavaScript uno). Nel post del blog sopra hanno distribuito il modulo compilato, e ora tutto funziona come un incantesimo.

Per fissare:

  • Scarica the compiled module
  • estrarre la cartella alla cartella node_modules e rinominarlo now
  • Non correre il nodo con la bandiera delega

Modifica: Nodo 0. 7.0 usa V8 3.8.6 che risolve anche questo problema. Basta eseguire il flag --harmony e rimuovere il riferimento a node-proxy.

Problemi correlati