Monday, August 12, 2013

Best way to remove an event handler in jQuery among two event handler

With jQuery 1.7 onward the event API has been updated, .bind()/.unbind() are still available for backwards compatibility, but the preferred method is using the on()/off() functions. The below would now be,
$('#myimage').click(function() { return false; }); // Adds another click event
$('#myimage').off('click');
$('#myimage').on('click.mynamespace', function() { /* Do stuff */ });
$('#myimage').off('click.mynamespace');

In your example code you are simply adding another click event to the image, not overriding the previous one:
$('#myimage').click(function() { return false; }); // Adds another click event
Both click events will then get fired.
As people have said you can use unbind to remove all click events:
$('#myimage').unbind('click');
If you want to add a single event and then remove it (without removing any others that might have been added) then you can use event namespacing:
$('#myimage').bind('click.mynamespace', function() { /* Do stuff */ });
and to remove just your event:
$('#myimage').unbind('click.mynamespace');

Sunday, August 11, 2013

File upload using ExtJS and Grails

/* ExtJS code to create a form */
    var customerEditMainFormParent = new Ext.FormPanel({
        labelAlign: 'top',
        header:false,
        style: "height: 200px;",
        border:false,
        renderTo: 'updateCustomer',
        id: "customer-form2",
        name: "customer-form2",
        fileUpload:true,
        isUpload: true,
        enctype:'multipart/form-data',
        url: Ext.SERVER_URL + 'save_file_data',
        items: [
            {
                xtype: 'fileuploadfield',
                id: 'filedata',
                emptyText: 'Select a document to upload...',
                fieldLabel: 'File',
                buttonText: 'Browse'
            }
        ]
    )};

/* Grails code */
if(params.containsKey("filedata") && bankAccountDetails != null) {
    try {
        String path = System.getProperty("java.io.tmpdir");
        /* Temporary directory */
        CommonsMultipartFile uploadFile = request.getFile("filedata");
        println uploadFile.getOriginalFilename();
        println uploadFile.getContentType();
        println uploadFile.getStorageDescription();
        uploadFile.transferTo(new File(path+"a.png"));
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

ExtJS add checkbox group to a panel on fly

/* Add a panel to parent panel as item */
{
    xtype: 'panel',
    id: "paymentMethod",
    fieldLabel: 'Preferred Payment Method'
}

/* Bind 'load' event on store that loads data as JSON */
var paymentstore = new Ext.data.JsonStore({
    proxy: new Ext.data.HttpProxy({
        url: Ext.SERVER_URL + 'get_data',
        method: 'post'
    }),
    listeners :{
        load:function() {
            var testArray = new Array();
            for(var i=0; i<records.length; i++) {
                testArray.push({

                    id: "some_id_" + records[i].data.id,
                    checked: true, /* or false */
                    name: "payment_method[" + records[i].data.id + "]",
                    boxLabel: records[i].data.name,
                    listeners:{
                        check:function (clickedObject, isChecked){
                            console.log(
clickedObject);
                            console.log(
isChecked);
                            console.log("Check box check status changed.");

                            var group = Ext.getCmp ("payment_group");
                            var length = group.items.getCount ();
                            var isCheck = group.items.items [0]. checked;
                        }
                    }
                });
            }
            var myCheckboxgroup = new Ext.form.CheckboxGroup({
                id:'payment_group',
                fieldLabel: 'Checkboxes',
                boxLabel:'State',

                columns: 1,
                items:testArray //created in previous snippet.
            });
            Ext.getCmp("paymentMethod").add(myCheckboxgroup);

            Ext.getCmp("paymentMethod").doLayout();
        }
    },
    fields: ['id',  'name', "description"],
    totalProperty: 'totalCount',
    root: 'data'
});

/* Load store */
paymentstore.load({
    params: {
        start: 0
    }
});

Jquery/JS prevent right click menu in browsers

Using jQuery:
$('div#id_of_div').on("contextmenu",function(evt){
    evt.preventDefault(); return false;
});
Or disable context menu on the whole page:
$(document).on("contextmenu",function(evt){
    evt.preventDefault(); return false;
});

Thursday, August 8, 2013

Php create a singletone mysql database connection class

<?php

class Database {

    private static $db;
    private $connection;

    private function __construct() {
        $this->connection = new MySQLi("localhost", "my_user", "my_password", "my_db", "3306");
    }

    function __destruct() {
        $this->connection->close();
    }

    public static function getConnection() {
        if ($db == null) {
            $db = new Database();
        }
        return $db->connection;
    }
}

?>
Then just use $db = Database::getConnection(); wherever I need it.

CakePHP: Accessing database.php values

$fields = get_class_vars('DATABASE_CONFIG')

print_r($fields['default']);
or you can use; 
 
App::Import('ConnectionManager');
$ds = ConnectionManager::getDataSource('default');
$dsc = $ds->config;

print_r($dsc);
Will output like this:
Array
(
    [persistent] => 
    [host] => localhost
    [login] => root
    [password] => 
    [database] => db_name
    [port] => 3306
    [driver] => mysql
    [prefix] => 
) 

Extjs combobox:How to set user selected value as the default selected value

 /* Date store */
var dataStore = new Ext.data.JsonStore({
    proxy: new Ext.data.HttpProxy({
        url: Ext.SERVER_URL + 'get_data',
        method: 'post'
    }),
    listeners :{
        load:function() {
            /**
            /* The code block at the end labeled
            /* 'And select a value after load store' can be written here.
            */
        }
    },
    fields: ['id',  'name'],
    totalProperty: 'totalCount',
    root: 'data'
});

/* Suppose data returned as */
{totalCount: 2, data:  [{"id":1,"name":"First Item"},{"id":2,"name":"Second Item"}] }

/* Combobox initialize */
{
    xtype: 'combo',
    id: "domId",
    fieldLabel: 'Data Name',
    hiddenName: 'cb_data',
    store: dataStore,
    displayField: 'name',
    labelSeparator :'',
    valueField: 'id',
    typeAhead: true,
    autoSelect: true,
    mode: 'local',
    triggerAction: 'all',
    selectOnFocus: true,
    allowBlank: true,
    blankText: 'Select status',
    editable: false
}

/* And select a value after load store */
var combo = Ext.getCmp("domId");
combo.getStore().on(
    "load",function() {
        var value = 2;
        /* Set your value to select in combobox */
        /* This will select with id = 2 and label = 'Second Item'.
        if(value == 0) { /* Default selection */
            var recordSelected = combo.getStore().getAt(0);
            combo.setValue(recordSelected.get('id'));
        } else {
            combo.setValue(value);
        }
    },
    this,
    {
        single: true
    }
);