Tencent / Hippy

Hippy is designed to easily build cross-platform dynamic apps. 👏
https://hippyjs.org
Apache License 2.0
7.96k stars 942 forks source link

【NAPI】在 class binding 的方法中,能否支持直接透传递当前类的 shared_ptr<CtxValue> 指针? #3919

Open JimmyVV opened 2 months ago

JimmyVV commented 2 months ago

Is your feature request related to a problem? Please describe. 现在遇到一个问题,通过一个类方法去创建另外一个类时,子对象需要有个属性指像创建对象。

但现在的设计下,没有办法做到

let mediaElemenet = new MediaElement();
mediaElement.maxSize = 2000;
let context = mediaElement.getContext();

context.element.maxSize;

Describe the solution you'd like 这里希望在方法中,能够有办法获得当前实例对象的指针。

FunctionDefine<MediaElement> addPath;
        addPath.name = "addPath";
        addPath.callback = [weak_scope](MediaElement *thiz,
                                        size_t argument_count,
                             const std::shared_ptr<CtxValue> arguments[],
                             std::shared_ptr<CtxValue> &exception) -> std::shared_ptr<CtxValue> {
            auto scope = weak_scope.lock();
            if (!scope) {
                return nullptr;
            }
            auto context = scope->GetContext();
            if (argument_count == 0) {
                exception = context->CreateException("Path2D::addPath need to have at least 1 argument");
                return nullptr;
            }
            auto context_class = scope->GetJavascriptClass("MediaContext");
           // @note: 能否有全局方法实现?
            std::shared_ptr<CtxValue> argv[] = {
                // thiz->Holder()
            };
            auto context = context->NewInstance(context_class, 1, argv, nullptr);
            return context;
        };

Describe alternatives you've considered

Additional context

hippy-service[bot] commented 3 weeks ago

Pay attention 🛎️ !! There has been no activity on this issue for 2 months, so I will label it stalled. It will be automatically closed in 60 days if no more activity. Feel free to leave a comment if you have any questions.

JimmyVV commented 3 weeks ago

已经收到哦~~~~