feat:add nativeChannel to let js call native view's method
This commit is contained in:
parent
ae5287fd7e
commit
8c83c3d13e
@ -19,12 +19,17 @@ import pub.doric.DoricContext;
|
||||
import pub.doric.async.AsyncResult;
|
||||
import pub.doric.extension.bridge.DoricMethod;
|
||||
import pub.doric.extension.bridge.DoricPlugin;
|
||||
import pub.doric.extension.bridge.DoricPromise;
|
||||
import pub.doric.utils.DoricLog;
|
||||
import pub.doric.utils.ThreadMode;
|
||||
import pub.doric.shader.RootNode;
|
||||
|
||||
import com.github.pengfeizhou.jscore.ArchiveException;
|
||||
import com.github.pengfeizhou.jscore.JSArray;
|
||||
import com.github.pengfeizhou.jscore.JSDecoder;
|
||||
import com.github.pengfeizhou.jscore.JSObject;
|
||||
import com.github.pengfeizhou.jscore.JSValue;
|
||||
import com.github.pengfeizhou.jscore.JavaValue;
|
||||
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
@ -71,6 +76,37 @@ public class ShaderPlugin extends DoricJavaPlugin {
|
||||
e.printStackTrace();
|
||||
DoricLog.e("Shader.render:error%s", e.getLocalizedMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@DoricMethod
|
||||
public void command(JSDecoder jsDecoder, final DoricPromise doricPromise) {
|
||||
try {
|
||||
final JSObject jsObject = jsDecoder.decode().asObject();
|
||||
final JSValue[] viewIds = jsObject.getProperty("viewIds").asArray().toArray();
|
||||
final String name = jsObject.getProperty("name").asString().value();
|
||||
getDoricContext().getDriver().asyncCall(new Callable<JavaValue>() {
|
||||
@Override
|
||||
public JavaValue call() throws Exception {
|
||||
return new JavaValue("called");
|
||||
}
|
||||
}, ThreadMode.UI).setCallback(new AsyncResult.Callback<JavaValue>() {
|
||||
@Override
|
||||
public void onResult(JavaValue result) {
|
||||
doricPromise.resolve(result);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable t) {
|
||||
doricPromise.reject(new JavaValue(t.getLocalizedMessage()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFinish() {
|
||||
|
||||
}
|
||||
});
|
||||
} catch (ArchiveException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -73,6 +73,13 @@ class ListPanel extends Panel {
|
||||
it.onClick = () => {
|
||||
log(`Click item at ${idx}`)
|
||||
it.height += 10
|
||||
it.nativeChannel(context, "getWidth")().then(
|
||||
resolve => {
|
||||
log(`resolve,${resolve}`)
|
||||
},
|
||||
reject => {
|
||||
log(`reject,${reject}`)
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
|
@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import { LayoutConfig, Group, Property, IView } from "./view";
|
||||
import { Group, Property, IView } from "./view";
|
||||
import { Gravity } from "../util/gravity";
|
||||
|
||||
export interface IStack extends IView {
|
||||
@ -22,8 +22,6 @@ export interface IStack extends IView {
|
||||
export class Stack extends Group implements IStack {
|
||||
}
|
||||
|
||||
|
||||
|
||||
export class Root extends Stack {
|
||||
|
||||
}
|
||||
|
@ -255,6 +255,24 @@ export abstract class View implements Modeling, IView {
|
||||
in(group: Group) {
|
||||
group.addChild(this)
|
||||
}
|
||||
|
||||
nativeChannel(context: any, name: string) {
|
||||
let thisView: View | undefined = this
|
||||
return function (...args: any) {
|
||||
const func = context.shader.command
|
||||
const viewIds = []
|
||||
while (thisView != undefined) {
|
||||
viewIds.push(thisView.viewId)
|
||||
thisView = thisView.superview
|
||||
}
|
||||
const params = {
|
||||
viewIds: viewIds.reverse(),
|
||||
name,
|
||||
args,
|
||||
}
|
||||
return Reflect.apply(func, undefined, [params]) as Promise<any>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export abstract class Superview extends View {
|
||||
|
Reference in New Issue
Block a user