我有一个名为changePlaceName
的方法,我知道它正在工作,但在我调用getPlaces
查看更改后,我看不到新的地名,而是在创建新地方时看到的名称。
这是changePlaceName
export function changePlaceName(placeId: u32, placeName: PlaceName): void {
assert(placeId >= 0, 'Place ID must be >= 0');
const place = Place.find(placeId);
logging.log(place.name); //gives "Galata Tower"
place.name = placeName;
logging.log(place.name); // gives "New Galata Tower"
}
我需要以某种方式保存它,但我不知道该怎么做。
我也尝试过这种方式;
export function changePlaceName(placeId: u32, placeName: string): void {
assert(placeId >= 0, 'Place ID must be >= 0');
const place = Place.find(placeId);
logging.log(place.name);
place.name = placeName;
let newPlace = storage.get<string>(placeName, 'new galata tower');
storage.set<string>(placeName, newPlace);
logging.log('New place is now: ' + newPlace);
}
现在我的视觉代码抱怨storage.set
中的newPlace
我该如何修复它?
Place.find
的代码是什么?我想你在幕后使用的是一个持久地图。
有Place.set
吗?您需要将Place存储回用于查找它的相同密钥。
因为您正在使用某种类来管理"地点";,为什么不在save()
中添加一个实例方法呢?
顺便说一句,如果你也在这里发布Place
的代码,会有所帮助
我的猜测是它看起来像这样?
注意:这是未经测试的代码
@nearBindgen
class Place {
private id: number | null
private name: string
static find (placeId: number): Place {
// todo: add some validation for placeId here
const place = places[placeId]
place.id = placeId
return place
}
// here is the instance method that can save this class
save(): bool {
places[this.id] = this
}
}
// a collection of places where placeId is the index
const places = new PersistentVector<Place>("p")