Uncaught TypeError: undefined is not a function (asset-pipeline)

Uncaught TypeError: undefined is not a function (asset-pipeline)

我正在处理一个 Announcement class,当事件被调用时,我用它来通过 API 加载信息。

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();
        });
    });
});

这两段代码位于不同的文件中,但它们与资产管道连接在一起。首先加载公告class。

当我达到:

var Announcement = new Announcement(record);

它说:

Uncaught TypeError: undefined is not a function

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

从函数中删除公告名称。

Announcement = function Announcement (id) {

Announcement = function (id) {

或在函数之前删除 var Announcement =

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

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

原因是变量提升。您的代码正在执行,因为它是这样写的

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

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

局部变量公告已覆盖 public 公告。

这可能是 good read 以了解更多详细信息。