2017-03-13 4 views
0

Wie bewirbt man benutzerdefinierte Winkelfilterformatierer in Slick-grid benutzerdefinierten Zellen-FormatiererWie benutzerdefinierte Fliter Formatierer in einem Slick Gitter benutzerdefinierten Zellen-Formatierer

Angenommen, ich habe einen Winkelkundenfilterformatierer, der das Datum von einem Format in Anwendung zu konvertieren ein anderes Format.

var dateFilter = this.$filter('myDateFilterFormatter')('2006-04-07'); 

Es kehrt als 4/7/06.

Wie kann ich myDateFilterFormatter in Slick-grid benutzerdefinierten Zellen-Formatierer

Ich habe versucht, auf diese Weise

this.dateFommatter = function(row, cell, value, columnDef, dataContext){ 
      return "<p>"+ value | myDateFilterFormatter +"</p>"; 
     }; 

und versucht auch

this.dateFommatter = function(row, cell, value, columnDef, dataContext){ 
       return "<p>"+ this.$filter('myDateFilterFormatter')(value) +"</p>"; 
      }; 

Sowohl die Art und Weise mit Fehlern beendet. Ich kann keinen benutzerdefinierten Filter im Slick-Grid-Zeilenformatierer anwenden. Können Sie bitte vorschlagen, wie kann ich benutzerdefinierte Filter in Slick-Grid verwenden.

Antwort

1

this Inneren der dateFormatter Funktion bezieht sich auf die Funktion.

Es ist üblich so etwas wie

var self = this; 

... code ... 

this.dateFommatter = function(row, cell, value, columnDef, dataContext){ 
    return "<p>"+ self.$filter('myDateFilterFormatter')(value) +"</p>"; 
}; 

Um zu verwenden, um Ihre zweite Abfrage, den Code zu beantworten, die die Formatierungs nennt, ist zum Beispiel

function updateCell(row, cell) { 
    var cellNode = getCellNode(row, cell); 
    if (!cellNode) { 
    return; 
    } 

    var m = columns[cell], d = getDataItem(row); 
    if (currentEditor && activeRow === row && activeCell === cell) { 
    currentEditor.loadValue(d); 
    } else { 
    cellNode.innerHTML = d ? getFormatter(row, m)(row, cell, getDataItemValueForColumn(d, m), m, d) : ""; 
    invalidatePostProcessingResults(row); 
    } 
} 

Ich glaube, Sie fragen Zugang bekommen zu cellNode . Sie

var cellNode = grid.getCellNode(row, cell); 

zu Ihrem Formatierungsprogramm hinzufügen können, wenn Sie mögen.

Wenn Sie auf lange Sicht Zugriff auf den Zellknoten haben, können Sie die Funktion formatter und alle Aufrufe daran ändern, um das cellNode am Ende der Parameterliste hinzuzufügen. Dies wäre jedoch eine Änderung des Slickgrid-Codes.

EDIT: eigentlich habe ich gerade dies getestet und es funktioniert nicht, da bei der Zellenerstellung der Formatierer aufgerufen wird, bevor die Zelle erstellt wird. Ich habe den Formatierer in der neuesten Version von SlickGrid geändert, so dass anstelle einer Zeichenfolge optional ein Objekt { text: 'displayText', removeClasses: 'class1 class2', addClasses: 'class1' } zurückgegeben werden kann und die Klassen entfernt und der Zelle hinzugefügt werden, wenn der Formatierungsprogramm angewendet wird. Durch das Entfernen eines Klassenbereichs können vorherige Formatierungsklassen vor dem Anwenden der korrekten neuen Klasse gelöscht werden.

+0

Danke Es funktioniert für mich. Warum gibt es einen Unterschied zwischen diesem und Selbst. Wie auch immer ist das Selbst Bezug auf diese? –

+0

'' 'This''' ist eine spezielle integrierte JavaScript-Variable, die sich auf den Kontext des Codes bezieht. ganz oben bezieht sich '' 'this''' auf den Controller, also können wir die Variable' '' self''' dazu setzen (wir könnten es alternativ '' 'Controller''' oder irgendwas anderes nennen). Innerhalb der Funktion bezieht sich '' this''' auf die Funktion, nicht auf den Controller, also verwenden wir die Variable '' 'self''', die zuvor definiert wurde, um den Controller zu beziehen. –

+0

danke. Ich verstehe jetzt. Aber ich habe noch ein Problem. Wie können wir eine Funktion mit ng-click im Element return by formatter aufrufen? –

0

Entfernen Sie this, wenn Sie Filter aufrufen.

Änderung "<p>"+ this.$filter('myDateFilterFormatter')(value) +"</p>"

zu "<p>"+ $filter('myDateFilterFormatter')(value) +"</p>"

Demo

+0

Ich bin in der Lage, Filter im Controller zu verwenden, aber ein Problem im Slick-Grid-Zeilenformatierer. Ich versuche, die Zellendaten mit benutzerdefinierten Formatierer zu formatieren :( –

Verwandte Themen