我在Windows 10笔记本电脑上使用Visual Studio 2017社区,并从此处使用Contoso University示例程序: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)
}
]
};
它给出错误“对象不支持属性或方法'时刻'”。
我通过执行此包管理器命令“Install-Package Moment.js”安装了moment.js 2.18.2。它在我的MVC项目的Scripts文件夹中安装了moment.js脚本。
我也把它放在App_Start \ BundleConfig.cs文件中(第一个添加已经存在):
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中尝试时,它不会出错,但程序无法正常运行。
在完成开始使用它的所有步骤后,是否有人知道如何解决此问题?
感谢任何帮助。
谢谢, 贝
答案 0 :(得分:1)
您需要加载datatables 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之后将其包含在包中。
答案 1 :(得分: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 文件的末尾:
@Scripts.Render("~/bundles/momentPlugin")
@Scripts.Render("~/bundles/moment")
这使我能够在不收到错误的情况下运行应用程序。