diff --git a/cef/bind/v8-bind.go b/cef/bind/v8-bind.go index f5c93a49..6c40b4f2 100644 --- a/cef/bind/v8-bind.go +++ b/cef/bind/v8-bind.go @@ -178,6 +178,7 @@ func Test() { objectKey.SetValue([]any{"字符串", 100001, 22222.333, true, testObj}) fmt.Println("objectKey-to-array:", objectKey.JSONString()) + fmt.Println("objectKey-to-array:", objectKey.IsArray()) // 数组 var arrayFunc = func() string { @@ -198,6 +199,14 @@ func Test() { arrayIndex1 = bind.GetJSValue(arrayIndex1.Id()) fmt.Println("arrayKey index 1:", arrayIndex1.AsString().Value()) arrayKey.Add("添加一个字符串") + + //end + fmt.Println("fieldCollection.Len():", bind.fieldCollection.Len(), len(bind.hasFieldCollection)) + for k, v := range bind.hasFieldCollection { + jsv := bind.GetJSValue(v) + fmt.Println("k:", k, "v:", v, "jsv:", jsv.Type()) + } + } func TestBind() { diff --git a/cef/bind/v8-dynamic-type.go b/cef/bind/v8-dynamic-type.go index f64a3ef6..2bc708d6 100644 --- a/cef/bind/v8-dynamic-type.go +++ b/cef/bind/v8-dynamic-type.go @@ -36,31 +36,32 @@ var ( // // GO和JS动态变量类型 type JSValue interface { - Name() string //当前变量绑定的名称 - Bytes() []byte //变量值转换为字节 - JSONString() string //变量值转换为JSON String - SetValue(value any) //设置新值 - IsInteger() bool //是否 Integer - IsDouble() bool //是否 Double - IsString() bool //是否 String - IsBoolean() bool //是否 Boolean - IsObject() bool //是否 Object - IsArray() bool //是否 Array - IsNull() bool //是否 Null - IsUndefined() bool //是否 Undefined - IsFunction() bool //是否 Function - AsInteger() JSInteger //转换为 Integer 失败返回 nil - AsDouble() JSDouble //转换为 Double 失败返回 nil - AsString() JSString //转换为 String 失败返回 nil - AsBoolean() JSBoolean //转换为 Boolean 失败返回 nil - AsObject() JSObject //转换为 Object 失败返回 nil - AsArray() JSArray //转换为 Array 失败返回 nil - AsNull() JSNull //转换为 Null 失败返回 nil - AsUndefined() JSUndefined //转换为 Undefined 失败返回 nil - AsFunction() JSFunction //转换为 Function 失败返回 nil - AsV8Value() JSValue //转换为 JSValue + Name() string //当前变量绑定的名称 + Bytes() []byte //变量值转换为字节 + JSONString() string //变量值转换为JSON String + SetValue(value any) //设置新值 + IsInteger() bool //是否 Integer + IsDouble() bool //是否 Double + IsString() bool //是否 String + IsBoolean() bool //是否 Boolean + IsObject() bool //是否 Object + IsArray() bool //是否 Array + IsNull() bool //是否 Null + IsUndefined() bool //是否 Undefined + IsFunction() bool //是否 Function + AsInteger() JSInteger //转换为 Integer 失败返回 nil + AsDouble() JSDouble //转换为 Double 失败返回 nil + AsString() JSString //转换为 String 失败返回 nil + AsBoolean() JSBoolean //转换为 Boolean 失败返回 nil + AsObject() JSObject //转换为 Object 失败返回 nil + AsArray() JSArray //转换为 Array 失败返回 nil + AsNull() JSNull //转换为 Null 失败返回 nil + AsUndefined() JSUndefined //转换为 Undefined 失败返回 nil + AsFunction() JSFunction //转换为 Function 失败返回 nil + AsV8Value() JSValue //转换为 JSValue + Id() uintptr //指针ID + Type() consts.GO_VALUE_TYPE //类型 setId(id uintptr) - Id() uintptr free() } @@ -106,7 +107,7 @@ func (m *V8Value) SetValue(value any) { } switch kind { case reflect.Struct: - m.value = &json.JsonData{T: consts.GO_VALUE_STRUCT, V: value, S: 0} + m.value = &json.JsonData{T: consts.GO_VALUE_MAP, V: value, S: 0} case reflect.Map: m.value = &json.JsonData{T: consts.GO_VALUE_MAP, V: value, S: rv.Len()} case reflect.Slice: @@ -161,7 +162,7 @@ func (m *V8Value) IsArray() bool { } func (m *V8Value) IsObject() bool { - return m.value.Type() == consts.GO_VALUE_STRUCT + return m.value.IsObject() } func (m *V8Value) IsFunction() bool { @@ -279,6 +280,13 @@ func (m *V8Value) AsV8Value() JSValue { return m } +func (m *V8Value) Type() consts.GO_VALUE_TYPE { + if m == nil { + return consts.GO_VALUE_INVALID + } + return m.value.Type() +} + func (m *V8Value) free() { if m.value != nil { m.id = 0 @@ -413,7 +421,7 @@ func NewObject(object any) JSObject { } v := new(jsObject) v.name = rv.Type().Elem().Name() - v.value = &json.JsonData{T: consts.GO_VALUE_STRUCT, V: object, S: 0} + v.value = &json.JsonData{T: consts.GO_VALUE_MAP, V: object, S: 0} v.rv = &rv bind.Set(v.name, v) return v diff --git a/cef/bind/v8-js-array.go b/cef/bind/v8-js-array.go index 9301c1b8..cf33cdca 100644 --- a/cef/bind/v8-js-array.go +++ b/cef/bind/v8-js-array.go @@ -129,7 +129,7 @@ func (m *jsArray) createItem(index int, value any) JSValue { v := new(jsObject) v.pName = m.name v.name = strconv.Itoa(index) - v.value = &json.JsonData{T: consts.GO_VALUE_STRUCT, V: rv.Interface(), S: 0} + v.value = &json.JsonData{T: consts.GO_VALUE_MAP, V: rv.Interface(), S: 0} v.rv = &rv bind.Set(v.nameKey(), v) return v