Grails的
def update(Bookmark bookmark) {
if (params.item) {
def portfolio = Portfolio.read(params.item)
bookmark.addToItems(portfolio.id)
bookmark.addToPortfolios(portfolio.id)
} else if (params.xitem) {
bookmark.removeFromItems(params.xitem)
bookmark.removeFromPortfolios(portfolio.id)
}
try {
println " Validate? " + bookmark.validate()
bookmark.save(failOnError:true, flush:true)
} catch (e) {
e.printStackTrace()
log.error e
respond e
return
}
def item = [:]
item.name = bookmark.name
item.id = bookmark.id
item.items = bookmark.items ?: []
item.portfolios = bookmark.portfolios ?: []
item.added = true
respond item
}
JQuery的
$('.box').on('click', '.icn-close-white', function (e) {
e.preventDefault();
deleteBookmarkItem( $(this), $(this).parent().attr('data-portfolio-id'), $(this).parent().attr('data-bookmark-id') );
});
function deleteBookmarkItem( btn, itemID, bookmarkID ) {
var sendData = {
xitem: itemID,
ownerId: userSessionId
};
$.ajax({
url: '/api/bookmarks/'+ bookmarkID + '?' + $.param( sendData ),
type: 'PUT',
contentType: 'application/json',
success: function( response ) {
//unlink or remove portfolio from bookmark
$('[data-portfolio-id="'+itemID+'"]').remove();
console.log(response);
},
error: function(error){
console.log(error);
}
});
}
Stacktrace:没有这样的属性:类的组合。
投资组合ID是itemId,书签ID是bookmarkID。更新是由grails为书签生成的,因此如果使用xitem,它应该能够从书签列表中删除项目组合ID。我还通过评论“bookmark.removeFromPortfolios(portfolio.id)”行进行测试,它删除了项目,但是当刷新时,项目仍然存在。
帮助表示感谢。
答案 0 :(得分:0)
关于 Stacktrace:没有这样的属性:类的组合。
这是正常的,因为您指的是未在 else中定义的项目组合对象块(仅在中定义块)。 我猜您需要将代码更改为
if (params.item) {
def portfolio = Portfolio.read(params.item)
bookmark.addToItems(portfolio.id)
bookmark.addToPortfolios(portfolio.id)
} else if (params.xitem) {
def portfolio = ...//get portfolio instance or only portfolio.id here
bookmark.removeFromItems(params.xitem)
bookmark.removeFromPortfolios(portfolio.id)
}
关于它会删除项目但刷新时,项目仍然存在。 试着改变
bookmark.save(failOnError:true, flush:true)
到
bookmark.merge(failOnError:true, flush:true)