0

私のクラスが次のようなものだとしましょう:

namespace foo
{
    class Item
    {
    public:
        Item();
        ~Item();

        std::string Name;
        v8::Local<v8::Value> DataValue;
        bool ReadOnly;
    }; 

    static std::vector<Item *> GlobalCollection;
}

Item のベクトルがあり、getMessage("Name") は、ベクトル内を検索して対応する Name を見つけた後、クラス Item の DataValue メンバーを返す必要があります。

これまでのところ、DataValue の v8 オブジェクト参照値を JavaScript コードに取得しています。

デバッグ中に、ベクターからアイテムを取得した後、 v8::Value が存在しないことがわかりました。実際のデータの代わりに v8::Object 値しかありません。

私は達成しようとしています(javascript):

var a = my.global('VAR1', 1); // returns true / false
var b = my.global('VAR1'); // must return 1 (number)

var x = 'Store this globaly!';
var c = my.global("VAR2", x); // returns true / false
var d = my.global("VAR2"); // must return string "Store this globaly!"

x は、任意の JavaScript 値またはオブジェクトである可能性があります。

ありがとう

4

1 に答える 1

1

考えられる解決策の 1 つは次のとおりです。関数値についてはテストされていません...

class Item
{
public:
    Item();
    ~Item();

    std::string Name;
    v8::Persistent<v8::Object> DataValue;
    bool ReadOnly;
};

INSIDE SET FUNCTION:
v8::Local<v8::Object> dataValue;

item = new foo::Item();
item->Name = varName;
item->DataValue = v8::Persistent<v8::Object>::New(dataValue);

std::vector<foo::Item *>::iterator it;
it = foo::GlobalCollection.end();
it = foo::GlobalCollection.insert(it, item);

INSIDE GET FUNCTION:
v8::Local<v8::Value> ret;
foo::Item *item = bla-bla...;
ret = v8::Local<v8::Value>::New(item->DataValue);
return ret;

これが役立つことを願っています...

于 2013-04-04T09:14:41.487 に答える