2016-01-18 4 views
0

У меня есть много данных в моем приложении (версия 1.10.10). Я призываю ихИзвлечение прототипа прототипа данных

var myDt = $("#myId").DataTable({/*properties object*/}); 

мне нужен доступ к прототипу объекта myDt добавить один раз и навсегда в моем приложении, все пользовательские функции мне нужно для DataTables. Использование $().DataTable.prototype не сработало, и я не нашел никаких свойств «fn» внутри структуры данных данных. Об этом я ничего не нашел.

ответ

1

Предполагая, что DataTables плагин вы используете использует прототип, вы должны быть в состоянии найти его в источнике ищет .prototype или Object.create, бывший (prototype) является свойством на функциях, относится к объекту который будет назначен в качестве прототипа, когда эта функция вызывается через new, а последняя (Object.create) является механизмом для создания объекта с конкретным прототипом напрямую, без функции-конструктора и new.

В худшем случае, на ES5 + браузеров, вы можете получить прототип объекта с помощью Object.getPrototypeOf:

var proto = Object.getPrototypeOf(myDt); 

... но это потребует, чтобы вы создать DataTable, прежде чем вы могли бы добавить функции, который кажется неуклюжим.

0

Это должно работать:

$("#myId").dataTable() 

Если не работает, вы можете использовать "данные", чтобы сохранить DataTable объект на собственном

$("#myId").data("myDt", myDt) 

и получить его позже:

$("#myId").data("myDt") 
+0

Этот код возвращает сам объект таблицы, или его данные. Я понимаю, как применять mopdifications к одной таблице, но мне нужно применить свойства ко всем таблицам, поэтому мне нужен доступ к прототипу объекта datatables. – Nillus

1

Для получения дополнительной информации см. API plug-in development.

Новый метод API может быть зарегистрирован с использованием статического метода $.fn.dataTable.Api.register().

Пример:

$.fn.dataTable.Api.register('sum()', function() { 
    var sum = 0; 

    for (var i=0, ien=this.length ; i<ien ; i++) { 
     sum += this[i]; 
    } 

    return sum; 
}); 

Пример вызовы:

table.column(2).data().sum(); 
+0

Это, кажется, хороший способ добиться того, что мне нужно, но это я не о прототипах. Я предполагаю, что dt proto хорошо скрыт или даже недоступен извне, поэтому он предоставляет функции для реализации плагинов. Тем не менее, этот метод влияет на столбцы или строки, вместо этого мне нужен метод, связанный с полной таблицей. Мне нужно написать метод пост-рендеринга, доступный в каждом и вызываемый с помощью: myDt.myMethod(). – Nillus

Смежные вопросы