LWC,使用电线和 Apex 从 JavaScript 将记录设置到数据库 soql,错误

LWC, set record to database soql from JavaScript with wire and Apex, error

我尝试在 JS 中向数据库 soql 写入一些内容,但它不起作用。 当我单击按钮 'Add to Cart' 时,调用 handlePlaceOrder()。 这里调用了带有参数 String 的 Apex 方法 placeOrder('hello')。 然后它崩溃了“内部服务器错误”。 当我在 Developer Console 中仅执行 Apex 方法 placeOrder('Order01') 时,它起作用了,将 nameOfOrder 写入数据库。

代码如下:

html(确定):

<template>
  <div class="shopping-cart">
    <template if:true={messageFromMain}>
      <div class="container">
        <h1>Items in Cart</h1>
        <lightning-card title="Shopping cart">
          <lightning-button 
            class="slds-m-left_x-small"  
            label="Place order" 
            title="Place order"
            variant="success"
            onclick={handlePlaceOrder}>
          </lightning-button>
        </lightning-card>
      </div>
    </template>
    <template if:false={messageFromMain}>
      <h1>Select the shoes</h1>
    </template>
  </div>
</template>

JS(错误):

import { LightningElement, api, wire } from 'lwc';
import placeOrder from '@salesforce/apex/ProductMaster.placeOrder';

export default class ShoppingCart extends LightningElement {
  nameOfOrder;

  @api messageFromMain;

  @wire(placeOrder, { nameOfOrder: '$nameOfOrder'})


  // handle click to button Place order
  handlePlaceOrder() {
    console.log('It was pressed button \'Add to Cart\'.');

    placeOrder('hello');
  }
}

顶点(好):

@AuraEnabled(cacheable=true)
public static void placeOrder(String nameOfOrder) {
  Shop_Order__c newOrder = new Shop_Order__c(
    Text__c = nameOfOrder
  );
  insert newOrder;
}

错误:

Error: An internal server error has occurred
Error ID: 185265246-97831 (-1502885840)
    at U.B.mk (https://static.lightning.force.com/eu40/auraFW/javascript/Q8onN6EmJyGRC51_NSPc2A/aura_prod.js:656:438)

此 JavaScript 代码有何不正确之处? Here 是一个有类似问题的例子。

@wire(placeOrder, { nameOfOrder: '$nameOfOrder'})

您可能必须删除该行。您的 handlePlaceOrder() 被视为该行的延续(忽略换行符),作为异步处理完成时要执行的操作(回调)的处理程序。在你链接的答案中,将你写的内容与“fetchedContact”

进行比较

并且在 handlePlaceOrder 中,我认为您需要将参数作为 JSON 对象传递,其中名称与顶点参数的名称相匹配。尝试

顶点

@AuraEnabled
public static Id insertAccount(String n){
    Account a = new Account(Name = n);
    insert a;
    return a.Id;
}

组件相关html

<lightning-button label="test" onclick={handlePlaceOrder}>
</lightning-button>

组件相关JS

import insertAccount from '@salesforce/apex/SomeClass.insertAccount';
export default class SomeComp extends LightningElement {
handlePlaceOrder() {
        console.log('It was pressed button \'Add to Cart\'.');
        insertAccount({ n: 'hello' })
            .then(result => {
                console.log(result);
            })
            .catch(error => {
                debugger;
            });
    }

}

浏览器的控制台

并且它保存了名字 OK