Jquery Grails生成的更新-如果项为';xitem';

Jquery 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

圣杯

}

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(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)