Nano Hash - криптовалюты, майнинг, программирование

Собрать несколько нокаут-подписок в одно уведомление?

В нокауте вы можете сделать следующее:

myObservable.subscribe(function(newValue){ doSomething(); });

Теперь, если у меня есть несколько наблюдаемых, на которые я хочу подписаться, я мог бы сделать:

myObservable1.subscribe(function(){ doSomething(); }); myObservable2.subscribe(function(){ doSomething(); });

Однако это может стать немного неприглядным, когда у меня много подписчиков, а также, если вы хотите ограничить механизм обновления в настоящее время, вам придется делать это для каждой подписки.

Так есть ли способ как-то обернуть их все? то есть

ko.subscribeToMany(myObservable1, myObservable2) .throttle(500) .subscribe(function(){ doSomething() });

У меня есть сценарий, в котором я в основном хочу обновить диаграмму на основе изменений, и это довольно ресурсоемко, поэтому я надеялся, что вместо того, чтобы подписываться на каждый динамический бит данных, я мог бы сопоставить их в единую подписку в вычисляемом стиле, а затем оттуда регулируйте эту индивидуальную подписку, так как другие подписки могут захотеть получать уведомления сразу же без задержки/регулирования.

Так возможно ли вышеперечисленное с Knockout?


  • Вам нужен параметр newValue или вы просто хотите получать уведомления? 03.12.2014
  • В этом сценарии меня не волнует новое значение, я просто хочу знать, когда произошло изменение базовых данных. Однако я уверен, что другим в этой ситуации может понадобиться доступ к наблюдаемым, которые изменились, но давайте пока не будем усложнять это. 03.12.2014

Ответы:


1

Быстрая реализация может быть следующей:

ko.obsgroup = function() {

    var groupManager = {};    
    var observables = [];

    var throttle = 0;
    var throttleTimeout;

    for(var i = 0; i < arguments.length; i++) {
        observables.push(arguments[i]);
    }

    groupManager.throttle = function(duration) {
        throttle = duration;
        return groupManager;
    };

    groupManager.subscribe = function(handler) {

        function throttledHandler(val) {
            if(throttle > 0) {
                if(!throttleTimeout) {
                    throttleTimeout = setTimeout(function() {
                        throttleTimeout = undefined;
                        handler(val);
                    }, throttle);
                }
            } else {
                handler(val);
            }
        }

        for(var i = 0; i < arguments.length; i++) {
            observables[i].subscribe(throttledHandler);
        }
        return groupManager;
    };

    return groupManager;
};

Применение:

var vm = {
    v1: ko.observable(0),
    v2: ko.observable(0),
    v3: ko.observable(0),
    log: ko.observable(0)
};

ko.obsgroup(vm.v1, vm.v2, vm.v3)
  .throttle(1000)
  .subscribe(function(val) {
      vm.log('changed: ' + Date.now());
  });

ko.applyBindings(vm);

#

Демонстрация: JSFiddle

03.12.2014
  • Итак, вы в основном обертываете подписки извне, а затем делегируете их только после определенного дросселя. Дам вам ответ на данный момент, если кто-то не придумает лучший подход. 03.12.2014
  • Точно так же и в нокауте выполняется обновление значений регулирования. Но здесь регулирование применяется для уведомлений об изменениях. 03.12.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..