2015-01-13 46 views
0

我正在处理一个Announcement类,当调用一个事件时,我使用它来通过API加载信息。未捕获TypeError:undefined不是函数(asset-pipeline)

Announcement = function Announcement (id) { 

    var id = id;  
    var vars = {}; 

    this.load = function load() { 
     $.ajax({ 
      url: '/api/announcements/' + id, 
      dateType: 'json', 
      async: false, 
      success: function (data) { 
       vars = data.announcement; 
      } 
     });  
    } 

    this.getVars = function getVars() { 
     return vars; 
    } 
} 

这是我的事件:

$(window).ready(function() { 
    Dynatable.selector.bind('dynatable:afterUpdate', function (rows) { 
     $('.dy-button').on('click', function (event) { 
      var record = $(this).attr('record'); 
      var Announcement = new Announcement(record); 
      Announcement.load(); 
     }); 
    }); 
}); 

的两段代码在不同的文件,但它们都与资产的管道连接起来。通知类首先被加载。

当我到:

var Announcement = new Announcement(record); 

它说:

Uncaught TypeError: undefined is not a function 

我一直在试图修复它在过去的一天。

+0

如果将'$(window).ready'更改为'$(document).ready',会发生什么?只是好奇,如果这些是不同的事件... – War10ck

+0

@ War10ck这是一样的事情。 – GiamPy

+1

有趣。你应该考虑在函数内改变你的变量名称。用新创建的对象有效覆盖函数内的全局范围。这是你的真正意图吗? – War10ck

回答

0

原因是可变的提升。因为它是这样写的

$('.dy-button').on('click', function (event) { 
    var record; 
    var Announcement; 

    record = $(this).attr('record'); 
    Announcement = new Announcement(record); 
    Announcement.load(); 
}); 

局部变量声明重写了公众一个正在执行代码。

这可能是good read以了解更多细节。

0

从功能中删除通知名称。

Announcement = function Announcement (id) { 

Announcement = function (id) { 

或功能之前收尸var Announcement =

+0

它不修复它。你的建议只是使该功能匿名。我的是一个命名函数。 [请参阅此处](https://github.com/airbnb/javascript#functions) – GiamPy

+0

请参阅我的编辑,最后一行 – Tyr

+0

您上次的编辑也不起作用。 – GiamPy

0

你有var id = id,这应该是this.id = id

你不希望它是
Announcement = function Announcement(id){...
应该只是
function Announcment(id) {...

+0

'this.id'使财产公开,这是我不想要的。 – GiamPy

相关问题