Giter Club home page Giter Club logo

Comments (8)

Riim avatar Riim commented on July 19, 2024

Я так и делаю:

export default class Contacts extends EventEmitter {

    @computed metadataLoaded = function() {
        return this.locations !== void 0 && this.mediaCompanyTypes !== void 0 && this.themes !== void 0 &&
            this.tags !== void 0;
    };
}

Вроде работает))

from cellx.

arvitaly avatar arvitaly commented on July 19, 2024

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

from cellx.

Riim avatar Riim commented on July 19, 2024

Не уверен, что верно понял вопрос, но если речь о том, что сделавшая запрос ячейка должна сделать его снова, то для этого есть почему-то не описанный метод pull:

var value = cellx(push => {
    makeRequest(res => {
        push(res.data.value);
    });
});

// При первом чтении или вызове 'then' произойдёт запрос.
// 'then' дожидается первого push-а, то есть здесь ждём ответ.
value('then', () => {
    log(value()); // дальше при чтении перезапрос не происходит, отдаётся запомненное значение
    // => '1'

    value('pull', 0); // заставляем ячейку перезапросить данные
    value('then', () => {
        log(value()); // '2'
    });
});

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

третий параметр для сохранения значения во время запроса:

var value = cellx((push, fail, oldValue) => {
    makeRequest(res => {
        push(res.data.value);
    });

    return oldValue; // на время запроса ячейка останется со старым значением
});

если же нужно и значение ячейки на время запроса сохранять и как-то отмечать состояние загрузки, то тут без ещё одной ячейки не обойтись. Можно положить её рядом, но интересней как-то так:

var value = cellx(push => {
    makeRequest(res => {
        push(res.data.value);
    });
});

var displayedValue = cellx((push, fail, oldValue) => {
    return value() === void 0 ? oldValue || '' : value();
});

var currentlyLoading = cellx(() => {
    return value() === void 0;
});

тут value будет переключаться на undefined во время запроса, а displayedValue после первого нормального результата будет сохранять его до следующего (да и до первого норм результата, пока oldValue равен undefined, подставиться пустая строка, чтобы undefined не торчал в интерфейсе).

from cellx.

arvitaly avatar arvitaly commented on July 19, 2024

Все верно, но если ячеек много, а loader зависит ото всех, создавать для каждой display-ячейку?
В случае с then, возможно, хочется чего-то вроде Promise.all или как-то по другому работать с коллекцией, не знаю, еще надо осознать парадигму)

from cellx.

Riim avatar Riim commented on July 19, 2024

Все верно, но если ячеек много, а loader зависит ото всех, создавать для каждой display-ячейку?

попробуйте пока так делать, если таких ячеек будет действительно много (то есть ситуация будет не в каком-то одном месте приложения) и это будет напрягать, напишите, я к тому времени хорошенько обдумаю как можно допилить cellx без ущерба производительности (есть хороший вариант).

В случае с then, возможно, хочется чего-то вроде Promise.all

вызов функции cellx создаёт экземпляр cellx.Cell (там сложнее, но для простоты можно и так объяснить) и возвращает функцию которая проксирует часть своих вызовов на его (cellx.Cell) методы. Вызов prop('unwrap', 0) не проксируется на какой-то метод, он вернёт сам экземпляр cellx.Cell, у которого нормальные методы then и catch, то есть он совместим с обычными промисами:

Promise.all(
    somePromise,
    prop('unwrap', 0)
);

from cellx.

Riim avatar Riim commented on July 19, 2024

v1.6.46
Добавил метод Cell#isPending(), при вызове его в формуле произойдёт создание скрытой подячейки (на ячейке у которой был вызван метод) и сразу подписка на неё. Вроде это то, что нужно, и вроде даже хорошо работает. Пока это эксперементальная возможность, если будет хорошо работать, можно будет оставить. В общем, попробуйте.

Пример:

var value = cellx((push, fail, oldValue) => {
    makeRequest(res => {
        push(res.data.value);
    });

    return oldValue; // оставляем предыдущее значение на время повторных запросов
});

var currentlyLoading = cellx(() => {
    // состояние загрузки определяем подписываясь на автоматически создаваемые подячейки
    return value('isPending', 0) || otherValue('isPending', 0);
});

from cellx.

zerkalica avatar zerkalica commented on July 19, 2024

isPending просачивается через computable?

var value1 = cellx((push, fail, oldValue) => {
    makeRequest1(res => {
        push(res.data.value);
    });

    return oldValue;
});

var value2 = cellx((push, fail, oldValue) => {
    makeRequest2(res => {
        push(res.data.value);
    });

    return oldValue;
});

var computed = cellx(() => value1() + value2())

computed.isPending() === true ?

from cellx.

Riim avatar Riim commented on July 19, 2024

Нет((.

from cellx.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.