2014-04-03 30 views
0

控制器抓住VAR从GSP到js和然后控制器

 class BookmarkItemApiController { 

     static responseFormats = ['json', 'xml'] 

     static allowedMethods = [delete:['POST', 'DELETE'], update:['POST', 'PUT']] 

     def index() { 
      render (text:"test") 
     } 

     @Transactional 
     def deleteItem(Bookmark bookmark) { 

      if (bookmark == null) { 
       render status: NOT_FOUND 
       return 
      } 

    ///not working here //// 
      def itemid = params.itemid 
      println " --> itemid -- ${itemid}" 

      if (params.portfolio) { 
       itemid.delete() 
       println ">>> delete portfolio id" 
      } else if (params.catalogue) { 
       itemid.delete() 
       println ">>> delete id" 
      } else if (params.image) { 
       itemid.delete() 
       println ">>> delete image id" 
      } 
    ////////////////////////// 
      def item = [:] 
      item.name = bookmark.name 
      item.id = bookmark.id 
      item.delete = true 

      item.items = [] 
      item.items += bookmark.portfolios?:[] 
      item.items += bookmark.images?:[] 
      item.items += bookmark.catalogues?:[] 


      respond item 

     } 

JS

$('.ac-hns').on('click', '.icn-close-white', function(e) { 

     e.preventDefault(); 
     deleteBookmarkItem($(this), $(this).parent().data('id'), $(this).parent().data('type'), $(this).parent().attr('data-bookmark-id')); 
    }); 
function deleteBookmarkItem(btn, itemID, category, bookmarkID) { 
     var sendData = { 
      item: itemID, 
      // ownerId: userSessionId 
     }; 
     sendData[category] = itemID; 
     console.log(sendData) 

     console.log('?: ' + $.param(sendData)); 

     $.ajax({ 
      url: '/bookmarkItemApi/deleteItem/' + bookmarkID + '?' + $.param(sendData), 
      type: 'GET', 
      contentType: 'application/json', 
      dataType: 'json', 
      success: function(response) { 
       //unlink or remove portfolio from bookmark 
       $('[data-id="' + itemID + '"]').remove(); 
       console.log(response); 
      }, 
      error: function(error) { 
       console.log(error); 
       console.log('fails'); 
      } 
     }); 
    } 

GSP例如

 <g:each in="${bookmark.loadCatalogues()}" var="catalogue"> 
    <div class="mb ac-hns" data-id="${catalogue.id}" data-bookmark-id="${bookmark.id}" data-type="catalogue"> 
    <a href="/catalogue/more/${catalogue.id}"> 
    <span> 
     <span>${catalogue.title}</span> 
     <span>By ${catalogue.owner?.fullname}</span> 
    </span> 
    <span> 
     <span>love 
    </span> 
    </a> 
    <i class="icn-close-white"></i> 
</div> 
</g:each> 

JS抓住所有瓦尔(数据)就好了,但问题在控制器中,itemid似乎在堆栈跟踪中返回null。我无法将所有变量发送给控制器。我希望能够找到任何类型,组合,图像等,因为它的ID从书签中删除。

 def itemid = params.itemid 
    println " --> itemid -- ${itemid}" 

    if (params.portfolio) { 
     itemid.delete() 
     println ">>> delete portfolio id" 
    } else if (params.catalogue) { 
     itemid.delete() 
     println ">>> delete id" 
    } else if (params.image) { 
     itemid.delete() 
     println ">>> delete image id" 
    } 

测试println,但没有消息或任何东西。因此,假设这部分不起作用。

帮助感谢!

回答

0

如果我看到这个正确的,你发送帕拉姆名为item

var sendData = { 
    item: itemID, 
    // ownerId: userSessionId 
}; 

而在你的控制器,你正在寻找itemid

///not working here //// 
def itemid = params.itemid 
println " --> itemid -- ${itemid}" 
+0

如果我更换项目itemid,但它显示正确的ID,因为我有超过4个ID,它只会显示第一个。这是为什么? – kittymeows

+0

请解释“超过4个ID”。你的意思是说你有4条记录吗?你可能只发送其中一个... –

+0

嗨它已经解决了。控制器 - 我错过了从模型本身删除的关键。 – kittymeows