Jquery Grails生成的更新-如果项为';xitem';
圣杯 } JQueryJquery Grails生成的更新-如果项为';xitem';,jquery,ajax,grails,Jquery,Ajax,Grails,圣杯 } JQuery 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(p
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
Stacktrace:没有这样的属性:类的公文包
公文包id是itemId,书签id是bookmarkID。更新是由grailsforbookmark生成的,因此如果使用xitem,它应该能够从书签列表中删除公文包id。我还通过注释掉“bookmark.removefromportfolions(portfolio.id)”行进行了测试,它删除了项目,但在刷新时,项目仍然存在
谢谢你的帮助 关于
Stacktrace:没有这样的属性:类的公文包
这是正常的,因为您引用的是未在else if块中定义的公文包对象(仅在if块中定义)。
我想你需要把代码改成
$('.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);
}
});
}
关于它删除项目,但当刷新时,项目仍然存在。
尝试改变
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)
}
到
谢谢我尝试了“def portfolio=portfolio.get(params.id)”,但仍然没有得到任何结果。此外,我还测试了合并,刷新后项目仍然会返回
bookmark.save(failOnError:true, flush:true)
bookmark.merge(failOnError:true, flush:true)