问题描述
我尝试在 JS 中向数据库 soql 写一些东西,但它不起作用。 当我单击“添加到购物车”按钮时,它被称为 handlePlaceOrder()。 这里调用了带有参数 String 的 Apex 方法 placeOrder('hello')。 然后它崩溃了“内部服务器错误”。 当我在开发者控制台中只执行 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