我正在尝试向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>
答案 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理解。