未捕获的参考错误,未定义通知

时间:2018-09-05 11:01:43

标签: javascript ruby-on-rails coffeescript

我正在尝试向Rails应用程序添加通知。基本上,我是从JSON端点获取它们的,然后尝试使用某些Coffeescript Here's the JSON array来获取它们并将它们附加到我的html中。问题出在handleSuccess方法中,我遇到了未捕获的引用错误,未定义通知

notifications.js.coffee

 class Notifications
  constructor: ->
   @notifications = $("[data-behavior='notifications']")
   @setup() if @notifications.length > 0

  setup: ->
   $.ajax(
      url: "/notifications.json"
      dataType: "JSON"
      method: "GET"
      success: @handleSuccess
    )

  handleSuccess: (data) =>
   console.log(data)
   items = $.map data, (notification) ->
      "<a class='dropdown-item' href='#{notification.url}'># 
      {notification.action} #{notification.notifiable.type}</a>"

jQuery ->
 new Notifications

我从localhost:3000 / notifications.json获得的信息

[{“ actor”:“ emanuelcoen”,“ action”:“喜欢”,“可通知”:{“ type”:“您的列表”},“ url”:“ / lists / 10#list_10”}, {“ actor”:“ emanuelcoen”,“ action”:“喜欢”,“可通知”:{“ type”:“您的列表”},“ url”:“ / lists / 10#list_10”},{“ actor” :“ emanuelcoen”,“ action”:“喜欢”,“可通知”:{“ type”:“您的列表”},“ url”:“ / lists / 10#list_10”},{“ actor”:“ emanuelcoen” ,“动作”:“喜欢”,“可通知”:{“类型”:“您的列表”},“网址”:“ / lists / 10#list_10”},{“演员”:“ emanuelcoen”,“动作” :“喜欢”,“可通知”:{“类型”:“您的列表”},“网址”:“ / lists / 17#list_17”},{“演员”:“ emanuelcoen”,“动作”:“喜欢” ,“ notifiable”:{“ type”:“您的列表”},“ url”:“ / lists / 17#list_17”},{“ actor”:“ emanuelcoen”,“ action”:“喜欢”,“ notifiable” :{“ type”:“您的列表”},“ url”:“ / lists / 17#list_17”},{“ actor”:“ emanuelcoen”,“ action”:“喜欢”,“可通知”:{“ type “:”您的列表“},” url“:” / lists / 17#list_17“},{” actor“:” emanuelcoen“,” action“:”喜欢“,” notifiable“:{” type“:”您list“},” url“:” / lists / 17#list_17“},{” actor“:” emanuelcoen“,” action“:”喜欢“,” notifiable“:{” type“:”您的列表“}, “ url”:“ /列表/ 17#list_17“},{” actor“:” emanuelcoen“,” action“:”喜欢“,”可通知“:{” type“:”您的列表“},” url“:” // lists / 17#list_17 “},{” actor“:” emanuelcoen“,” action“:”喜欢“,”可通知“:{” type“:”您的列表“},” url“:” / lists / 17#list_17“}]] < / p>

1 个答案:

答案 0 :(得分:1)

您传递给$.map的函数中有缩进错误。它下方的字符串必须缩进,否则它假定您要传递一个要映射的空函数,并且由于未定义notification,因此它后面的行将引发错误。

  handleSuccess: (data) =>
   console.log(data)
   items = $.map data, (notification) ->
     "<a class='dropdown-item' href=''>#{notification.actor}</a>"

更新

关于您的通知未显示在页面上的评论-您未调用任何代码将要生成的html字符串添加到DOM。您可以为此使用$.append

  handleSuccess: (data) =>
   console.log(data)
   for notification in data
     @notifications.append(
       "<a class='dropdown-item' href=''>#{notification.actor}</a>")

不需要在通知数组上使用$.map,因为我们只是在另一个循环中对其进行渲染,因此我将其替换为单个Coffeescript理解。