protected void GenerateEventHandlerActionKey(IdentifierName eventName, IReadOnlyList <IFunctionContext> handlerList) { KEY(GetEventActionKeyName(eventName), LAMBDA(@model => DO.RETURN(ASYNC.LAMBDA((@state, @actions) => { LOCAL("newModel", out var @newModel, USE("Object").DOT("assign").INVOKE(INITOBJECT(), @model)); var modelMemberAccessRewriter = new ModelMemberAccessRewriter(Metadata.Page, @newModel); var apiMemberAccessRewriter = new BackendApiProxyAccessRewriter(Metadata.Page); var actionBlock = CodeGeneratorContext.GetContextOrThrow().GetCurrentBlock(); foreach (var handler in handlerList) { var rewrittenHandlerBody = apiMemberAccessRewriter.RewriteBlockStatement( modelMemberAccessRewriter.RewriteBlockStatement(handler.Body)); foreach (var statement in rewrittenHandlerBody.Statements) { actionBlock.AppendStatement(statement); } } actions.DOT("replaceModel").INVOKE(@newModel); })) )); }
protected AbstractExpression GetBoundModelExpression(AbstractExpression rootModel) { if (ModelBinding != null) { var modelMemberAccessRewriter = new ModelMemberAccessRewriter(Metadata.Page, rootModel); return(modelMemberAccessRewriter.RewriteExpression(ModelBinding)); } return(rootModel); }