由Grails生成的更新 - 如果项目为'xitem'则无法删除

时间:2014-02-04 07:00:10

标签: jquery ajax grails

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)”行进行测试,它删除了项目,但是当刷新时,项目仍然存在。

帮助表示感谢。

1 个答案:

答案 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)