2017-05-20 46 views
0

我使用的社区在Windows 10笔记本电脑的Visual Studio 2017年从这里Contoso大学示例程序工作:Contoso tutorial错误:对象不支持属性或方法“时刻”

我说我自己的控制器并查看使用jQuery的DataTables Table插件显示具有日期的电子邮件。我试图让使用日期从这里日期时间助手来显示:datetime helper

一切工作,并显示正常,直到我尝试在这段JavaScript代码格式化EmailDate:

var detailsTableOpt = { 
 
    'serverSide': true, 
 
    'processing': true, 
 
    'ajax': { 
 
    'url': '/Mailbox/GetEmailsData', 
 
    'data': function(d) { 
 
     d.MailboxID = selected; 
 
    } 
 
    }, 
 
    'destroy': true, 
 
    'columns': [{ 
 
     'data': 'From' 
 
    }, 
 
    { 
 
     'data': 'To' 
 
    }, 
 
    { 
 
     'data': 'Subject' 
 
    }, 
 
    { 
 
     'data': 'EmailDate', 
 
     columnDefs: [{ 
 
     targets: 3, 
 
     render: $.fn.dataTable.render.moment('YYYY/MM/DD', 'Do MMM YY') 
 
     }] 
 
    }, 
 
    { 
 
     'data': 'Size', 
 
     render: $.fn.dataTable.render.number(',', '.', 0) 
 
    } 
 
    ] 
 
};

它给出错误“对象不支持属性或方法的时刻”。

我通过执行这个package manager命令“Install-Package Moment.js”来安装了moment.js 2.18.2。它在我的MVC项目的脚本文件夹中安装了moment.js脚本。

我也把这个在App_Start \ BundleConfig.cs文件(第一个add已经在那里了):

 bundles.Add(new StyleBundle("~/Content/datatables").Include(
       "~/Content/DataTables/css/dataTables.bootstrap.css")); 

     bundles.Add(new ScriptBundle("~/bundles/moment").Include(
        "~/Scripts/moment.js")); 

我在一些文章,我应该尝试,如果moment.js插件弄清楚阅读正在加载,但我不知道该怎么做。

任何人都可以解释如何确定是否正在加载的moment.js?

我在IE 11中调试时出现这个错误。当我在Firefox中尝试它时,它没有给出错误,但程序没有按照它应该的方式运行。

有没有人知道如何解决这个问题后,开始使用它的所有步骤?

任何帮助将不胜感激。

感谢, 托尼

回答

1

您需要加载代码的数据表momentjs插件为工作。在example

链接CDN和项目链接实际上打破,但幸运的是,它包含了实际的代码本身,我将粘贴在这里为后人(我没有写这个代码)

// UMD 
(function(factory) { 
    "use strict"; 
  
    if (typeof define === 'function' && define.amd) { 
        // AMD 
        define(['jquery'], function ($) { 
            return factory($, window, document); 
        }); 
    } 
    else if (typeof exports === 'object') { 
        // CommonJS 
        module.exports = function (root, $) { 
            if (! root) { 
                root = window; 
            } 
  
            if (! $) { 
                $ = typeof window !== 'undefined' ? 
                    require('jquery') : 
                    require('jquery')(root); 
            } 
  
            return factory($, root, root.document); 
        }; 
    } 
    else { 
        // Browser 
        factory(jQuery, window, document); 
    } 
} 
(function($, window, document) { 
  
  
$.fn.dataTable.render.moment = function (from, to, locale) { 
    // Argument shifting 
    if (arguments.length === 1) { 
        locale = 'en'; 
        to = from; 
        from = 'YYYY-MM-DD'; 
    } 
    else if (arguments.length === 2) { 
        locale = 'en'; 
    } 
  
    return function (d, type, row) { 
        var m = window.moment(d, from, locale, true); 
  
        // Order and type get a number value from Moment, everything else 
        // sees the rendered value 
        return m.format(type === 'sort' || type === 'type' ? 'x' : to); 
    }; 
}; 
  
  
})); 

添加代码到一个JavaScript文件并将其包含在之后 momentjs和datatables。

+0

感谢您的帮助。我将带有该代码的momentPlugin.cs文件添加到脚本文件夹中,并在该脚本文件的BundlesConfig文件中添加了一个新的引用,但它仍然给出相同的错误。 – Tony

+0

@Anybody,有没有人有任何想法,我可以看看,以确定是否正在加载的moment.js脚本?我对如何使用Visual Studio调试器有一个很好的想法,尽管我从未调试过任何JavaScript。我也有一些关于如何使用F12 Developer工具的知识。如果我可以确定是否加载了moment.js脚本,我将更好地了解我应该采取什么方向来解决此问题。谢谢,托尼 – Tony

+0

你可以看到检查浏览器工具的网络标签。在搜索框中输入'moment'并重新加载页面 –

0

我将Aluan Haddad建议的插件代码添加到一个名为momentPlugin.js的文件中,并将其放入我的项目的Scripts文件夹中。

我添加这些行到App_Start \ BundleConfig.cs文件的末尾:

  bundles.Add(new ScriptBundle("~/bundles/momentPlugin").Include(
         "~/Scripts/momentPlugin.js")); 

      bundles.Add(new ScriptBundle("~/bundles/moment").Include(
         "~/Scripts/moment.js")); 

我添加这些行到_layout的端部。cshtml file:

@Scripts.Render("~/bundles/momentPlugin") 
@Scripts.Render("~/bundles/moment") 

这使我可以运行应用程序而不会出现错误。

相关问题