Вопрос

Я пытаюсь предоставить функции во всех pocket nowjs. Я хотел бы сделать это _.extendвсе карман, т.е. everyone.now. Анкет По какой -то причине, которую я не могу понять, _.extend Не удается должным образом предоставить функцию на стороне клиента.

Это мой текущий код:

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

Как на стороне сервера, так и на клиентских сторонах я могу сделать now.foo() просто хорошо. С другой стороны, now.bar() терпит неудачу, потому что now.bar не определено. Это относится к клиентским и серверным сторонам. Я попытался проверить наличие на стороне сервера, как показано выше на последней строке. Тем не менее, эта строка журналов undefined.

Подчеркивается extend Функция (очевидно) работает над другими объектами, поэтому я думаю, что это как -то связано с «пространством магического пространства имен», которое использует NowJS.

Почему расширение не работает с everyone.now И как я могу заставить его работать?


РЕДАКТИРОВАТЬ 2: Я копал еще немного в прокси. Похоже, что настройка свойства на прокси, передавая переменную, поскольку ее имя не работает. Я удалил свое первое редактирование, потому что этот тестовый приход более сужен.

Почему это не работает? Это ошибка? (В большинстве случаев я сам спрашиваю об этом, я знаю, что это не так, но это действительно заставляет меня невежественно ...)

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

Результат журнала:

set called
get called
get called

По всей видимости, proxy[ key ] = "bar"; не вызывает set быть вызванным на прокси. Почему это?

Это было полезно?

Решение

Они опубликовал запись в блоге На веб -сайте NowJS о том, как использовать node-proxy В Windows вместо собственной реализации V8 с использованием --harmony_proxies флаг.

Оказалось, что версия V8, которую Node в настоящее время использует в настоящее время, содержит несколько ошибок в отношении прокси, которые вызывали странное поведение, как указано в вопросе. node-proxy, однако, является модулем, который позволяет прокси (ядро «Пространство магических имен» NowJS) без эти ошибки. (Ошибки исправлены и в более новой версии V8, но это потребует пользовательской сборки узла.)

Я просто не мог понять, как построить node-proxy в Windows (это .node добавить; не чистый JavaScript One). В приведенном выше сообщении они распространили скомпилированный модуль, и теперь все работает как очарование.

Исправить:

  • Скачать Скомпилированный модуль
  • Извлечь папку в node_modules папка и переименовать ее в now
  • Не запускайте узел с помощью прокси -флага

Редактировать: Узел 0.7.0 использует V8 3.8.6, который также решает эту проблему. Просто беги с --harmony флаг и удалите ссылку на node-proxy.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top