jQuery: $ () .click (fn) по сравнению с $ () .bind ('щелчок', fn);

Я не уверен, что это лучший подход, но я создал метод расширения для класса DbContext, который принимает строковое имя таблицы данных и затем запрашивает таблицы sys для этой метаинформации. В частности, я создал следующие 2 класса и метод расширения.


TableSchema

Это класс высокого уровня, используемый для хранения соответствующих деталей схемы:

public class TableSchema
{
    public string Database {  get; internal set; }
    public string TableName { get; internal set; }
    public List<ColumnSchema> Columns { get; internal set; }
}

ColumnSchema

Как и TableSchema, это класс, который будет содержать все связанные с схемой детали для каждого столбца.

public class ColumnSchema
{
    public string ColumnName { get; internal set; }
    public int ColumnPosition { get; internal set; }
    public string Collation { get; internal set; }
    public string TypeName { get; internal set; }
    public short Size { get; internal set; }
    public byte Precision { get; internal set; }
    public byte Scale { get; internal set; }
    internal int _PK { get; set; }
    public bool IsIdentity { get; internal set; }
    public bool IsNullable { get; internal set; }

    public bool IsPrimaryKey
    {
        get { return _PK == 1; }
    }
}

Метод расширения (GetDbTableSchema)

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

public static class DbContextExtensions
{
    public static TableSchema GetDbTableSchema(this DbContext ctx, string tableName)
    {
        string qry = string.Format(
    @"SELECT * FROM (SELECT DISTINCT 
        c.name AS ColumnName, 
        c.column_id AS ColumnPosition,
        ty.name AS TypeName,
        c.max_length AS Size,
        c.precision AS Precision,
        c.scale AS Scale,
        CASE WHEN ic.column_id IS NOT NULL THEN 1 ELSE 0 END AS [_PK], 
        c.is_identity AS [IsIdentity],
        c.is_nullable AS [IsNullable]
    FROM sys.columns c 
        INNER JOIN sys.tables t ON c.object_id = t.object_id 
        INNER JOIN sys.types ty ON c.system_type_id = ty.system_type_id
        LEFT OUTER JOIN sys.indexes i ON c.object_id = i.object_id AND i.is_primary_key = 1
            LEFT OUTER JOIN sys.index_columns ic ON i.object_id = ic.object_id 
                AND i.index_id = ic.index_id 
                AND c.column_id = ic.column_id
    WHERE t.name = '{0}') t
    ORDER BY _PK DESC, ColumnPosition", tableName);", tableName);
        return new TableSchema
        {
            Columns = ctx.Database.SqlQuery<ColumnSchema>(qry).ToList(),
            Database = ctx.Database.Connection.Database,
            TableName = tableName
        };
    }
}

Использование очень простое. Предполагая, что у вас есть имя таблицы данных, передайте его в свой контекст.

using (var ctx = new MyEntityContext()
{
    TableSchema ts = ctx.GetDbTableSchema("MyTable");

    foreach (ColumnSchema cs in ts.Columns)
    {
        Debug.WriteLine("Column: {0}, {1}", cs.ColumnName, cs.IsNullable ? "NULL" : "NOT NULL");
    }
}
114
задан Alan Storm 6 February 2009 в 01:24
поделиться

5 ответов

Если это имеет значение, от источник jQuery :

jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +
    "mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave," +
    "change,select,submit,keydown,keypress,keyup,error").split(","), function(i, name){

    // Handle event binding
    jQuery.fn[name] = function(fn){
        return fn ? this.bind(name, fn) : this.trigger(name);
    };
});

Так не, нет никакого различия -

$().click(fn)

вызовы

$().bind('click',fn)
137
ответ дан Matthew Maravillas 5 November 2019 в 09:17
поделиться

+1 для ответа Matthew, но я думал, что должен упомянуть, что можно также связать больше чем один обработчик событий сразу с помощью bind

$('#myDiv').bind('mouseover focus', function() {
    $(this).addClass('focus')
});

, который является намного более чистым эквивалентом:

var myFunc = function() {
    $(this).addClass('focus');
};
$('#myDiv')
    .mouseover(myFunc)
    .focus(myFunc)
;
97
ответ дан nickf 5 November 2019 в 09:17
поделиться

Существует одно различие, в котором можно связать пользовательские события с помощью второй формы, которую Вы имеете. Иначе они, кажется, синонимичны. См.: Документы События jQuery

7
ответ дан nickohrn 5 November 2019 в 09:17
поделиться

There is the [data] parameter of bind which will occur only at bind-time, once.

You can also specify custom events as the first parameter of bind.

1
ответ дан 24 November 2019 в 02:33
поделиться

Если у вас есть Google Chrome, его инструменты разработчика имеют инструмент прослушивания событий, выберите элемент, который вы хотите отслеживать его событие.

Вы обнаружите, что использование обоих способов приводит к одному и тому же результату, поэтому они эквивалентны.

0
ответ дан 24 November 2019 в 02:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: