2017-05-20 2 views
0

ich von hier aus Visual Studio 2017 die Gemeinschaft auf einem Windows 10 Laptop und die Arbeit mit dem Contoso-Universität Beispielprogramm bin mit: Contoso tutorialFehler: Objekt unterstützt keine Eigenschaft oder Methode ‚Moment‘

ich meine eigenen Controller hinzugefügt und Anzeigen, um E-Mails mit einem Datum anzuzeigen, die das DataTables Table-Plug-In für jQuery verwenden. Ich versuche, das Datum zu erhalten, von hier mit dem Datetime-Helfer anzuzeigen: datetime helper

Alles funktioniert und fein zeigt, bis ich versuche, die EmailDate in diesem Stück Javascript zu formatieren:

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

Es gibt den Fehler "Objekt unterstützt keine Eigenschaft oder Methode 'Moment'".

Ich habe die moment.js 2.18.2 installiert, indem ich diesen Paketmanagerbefehl "Install-Package Moment.js" ausgeführt habe. Es hat das Skript "moment.js" im Ordner "Scripts" meines MVC-Projekts installiert.

Ich habe dies auch in der App_Start \ BundleConfig.cs-Datei (das erste Add schon da war):

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

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

ich in einigen Artikeln gelesen, dass ich versuchen soll, wenn die moment.js-Plugin, um herauszufinden, wird geladen, aber ich weiß nicht, wie ich das machen soll.

Kann jemand erklären, wie man bestimmt, ob die moment.js geladen wird?

Ich bekomme diesen Fehler, wenn ich in IE 11 debuggen. Wenn ich es in Firefox versuche, gibt es keinen Fehler, aber das Programm funktioniert nicht so, wie es sollte.

Weiß jemand, wie man dieses Problem löst, nachdem Sie alle Schritte unternommen haben, um es zu benutzen?

Jede Hilfe würde dankbar geschätzt werden.

Danke, Tony

Antwort

1

Sie müssen den Code für die Datentabellen momentjs Plugin für das arbeiten, um zu laden.

Der Link CDN und Projekt Links in der example gebrochen sind tatsächlich aber zum Glück, es enthält der eigentliche Code selbst, die ich für die Nachwelt hier einfügen wird (ich nicht schreiben diesen Code)

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

diesen Code hinzufügen zu einer JavaScript-Datei und enthalten es in Ihren Bundles nach Momentjs und Datatables.

+0

danke für Ihre Hilfe. Ich habe die Datei momentPlugin.cs mit dem darin enthaltenen Code in den Ordner Skripte eingefügt und in der Datei BundlesConfig für diese Skriptdatei einen neuen Verweis hinzugefügt, der jedoch immer noch den gleichen Fehler enthält. – Tony

+0

@Anybody, Hat jemand eine Vorstellung davon, was ich sehen kann, um festzustellen, ob das Skript moment.js geladen wird? Ich habe eine ziemlich gute Idee, wie man den Visual Studio Debugger benutzt, obwohl ich nie irgendein Javascript debuggte. Ich habe auch einige Kenntnisse über die Verwendung der F12-Entwicklerwerkzeuge. Wenn ich feststellen kann, ob das Skript moment.js geladen ist, habe ich eine bessere Vorstellung davon, in welche Richtung ich dieses Problem lösen sollte. Danke, Tony – Tony

+0

Sie können sehen, überprüfen Sie die Netzwerkregisterkarte Ihres Browser Tools. Tippe 'Moment' in das Suchfeld und lade die Seite neu –

0

Ich habe den Plugin-Code, den Aluan Haddad vorgeschlagen hat, in eine Datei namens momentPlugin.js eingefügt und in den Ordner Skripte meines Projekts eingefügt.

Ich habe diese Zeilen am Ende der App_Start \ BundleConfig.cs Datei:

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

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

Ich habe diese Zeilen am Ende des _Layout.cshtml Datei:

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

Das hat mich erlaubt die Anwendung auszuführen, ohne den Fehler.

Verwandte Themen