//for backbone(取代 find)
(function ($) {
// 找到符合過濾條件最接近的子孫
$.fn.closestChildren = function (selector) {
debugger;
var self = this;
this.each(function (i, dom) {
$find = $.closestChildren(dom, selector);
self[i] = $find.get(0);
});
/*------------------------------------*/
var resultList = this.toArray().filter(function (item) {
return (item != null);
});
for (var i = 0; i < this.length; i++) {
if (resultList[i]) {
this[i] = resultList[i];
} else {
delete this[i];
}
}
this.length = resultList.length;
return this;
};
/* ====================================================================== */
$.closestChildren = function (dom, selector) {
var domList = [];
var target = find(dom);
/* ---------------------------------- */
if (target.length) {
// 第一輪就找到
} else {
// 廣域搜尋
for (var i = 0; i < domList.length; i++) {
target = find(domList[i]);
if (target.length > 0) {
break;
}
}
}
/* ---------------------------------- */
function find(dom) {
var $findList = $(dom).children(selector);
if ($findList.length) {
// 有找到
} else {
// 沒找到
var childList = $(dom).children().toArray();
domList = domList.concat(childList);
}
return $findList;
}
domList = [];
return target;
};
})(jQuery);
2017年5月26日 星期五
(js)編寫含式變項,常會遇到的問題
function test_1() {
var data = {};
var y;
if(data.age){
y = data.age;
}else{
y = 5
}
alert(y);
}
function test_2() {
var data = [];
var y;
if(data[0]){
y = data[0];
}else{
y = 5;
}
alert(y);
}
function test_3() {
var data;
var y;
// 以下不行
if(data.age){
y = data.age;
}else{
y = 5
}
alert(y);
}
var data = {};
var y;
if(data.age){
y = data.age;
}else{
y = 5
}
alert(y);
}
function test_2() {
var data = [];
var y;
if(data[0]){
y = data[0];
}else{
y = 5;
}
alert(y);
}
function test_3() {
var data;
var y;
// 以下不行
if(data.age){
y = data.age;
}else{
y = 5
}
alert(y);
}
2017年5月25日 星期四
2017年5月18日 星期四
backbone 模組事件
Model >>
changechange:attriubute
destory
invalid
-------------------------------------------------------------
Collection >>
addremove
reset
sort
change
change:attribute
默默更新數據,不激發事件 => collection.at(i).set({}, {silent: true})
-------------------------------------------------------------
{}.listenTo({}, 'change reser', fn);
2017年5月17日 星期三
backbone幾個模組的 initailize
var Model_1 = Backbone.Model.extend({
idAttribute: 'house_id',
initialize: function(model, option) {
debugger;
console.log('model initialize');
console.dir(arguments);
}
});
var option = {
age: 15
};
var m_1 = new Model_1(data_1[0], option);
------------------------------------------------------------------------
var Model_1 = Backbone.Model.extend({
idAttribute: 'house_id'
});
var option = {
age: 15,
model: Model_1 // 直接附加
};
var dataList_1 = _.bbc({
initialize: function(models, option) {
debugger;
console.log('collection initailize');
console.dir(arguments);
}
}, data_1, option);
idAttribute: 'house_id',
initialize: function(model, option) {
debugger;
console.log('model initialize');
console.dir(arguments);
}
});
var option = {
age: 15
};
var m_1 = new Model_1(data_1[0], option);
------------------------------------------------------------------------
var Model_1 = Backbone.Model.extend({
idAttribute: 'house_id'
});
var option = {
age: 15,
model: Model_1 // 直接附加
};
var dataList_1 = _.bbc({
initialize: function(models, option) {
debugger;
console.log('collection initailize');
console.dir(arguments);
}
}, data_1, option);
2017年5月16日 星期二
mustache
if
{{#print}}
{{#beatles}}
<p>{{name}}</p>
{{/beatles}}
{{/print}}
------------------------------------
else
{{^print}}
{{#beatles}}
<p>no print: {{name}}</p>
{{/beatles}}
{{/print}}
viewData =
{
print: true,
beatles: [
{ "firstName": "John", "lastName": "Lennon" },
{ "firstName": "Paul", "lastName": "McCartney" },
{ "firstName": "George", "lastName": "Harrison" },
{ "firstName": "Ringo", "lastName": "Starr" }
],
name: function () {
return this.firstName + " " + this.lastName;
}
}
{{#print}}
{{#beatles}}
<p>{{name}}</p>
{{/beatles}}
{{/print}}
------------------------------------
else
{{^print}}
{{#beatles}}
<p>no print: {{name}}</p>
{{/beatles}}
{{/print}}
viewData =
{
print: true,
beatles: [
{ "firstName": "John", "lastName": "Lennon" },
{ "firstName": "Paul", "lastName": "McCartney" },
{ "firstName": "George", "lastName": "Harrison" },
{ "firstName": "Ringo", "lastName": "Starr" }
],
name: function () {
return this.firstName + " " + this.lastName;
}
}
2017年5月15日 星期一
atom 設定
'.platform-win32':
'ctrl-\\': 'unset!'
'ctrl-alt-l': 'unset!'
'ctrl-`':'tree-view:toggle'
'alt-`':'symbols-list:toggle'
'atom-text-editor':
'ctrl-space': 'unset!'
'ctrl-\\': 'autocomplete-plus:activate'
# 'ctrl-\\': 'autocomplete:toggle'
'alt-/': 'autocomplete:toggle'
'.active.pane':
'alt-\'': 'autocomplete:toggle'
'atom-workspace':
'ctrl-alt-g': 'git-control:toggle'
'ctrl-\\': 'unset!'
'ctrl-alt-l': 'unset!'
'ctrl-`':'tree-view:toggle'
'alt-`':'symbols-list:toggle'
'atom-text-editor':
'ctrl-space': 'unset!'
'ctrl-\\': 'autocomplete-plus:activate'
# 'ctrl-\\': 'autocomplete:toggle'
'alt-/': 'autocomplete:toggle'
'.active.pane':
'alt-\'': 'autocomplete:toggle'
'atom-workspace':
'ctrl-alt-g': 'git-control:toggle'
2017年5月11日 星期四
(backbone)簡化程序
;
(function() {
// 簡化 backbone 程序
//
if (typeof _ !== 'function' && typeof Backbone !== 'object') {
return;
} else {
_.mixin({
// Backbone.view.extend()
bbv: function(option) {
var bb = new BackboneExtend();
var view = bb.view(option);
return view;
}
});
_win_included = true;
}
/* ====================================================================== */
function BackboneExtend() {};
(function() {
this.view = function(option) {
var View_class = Backbone.View.extend(option);
var view = new View_class();
// view._class = View_class; view.constructor 可取得
return view;
}
}).call(BackboneExtend.prototype);
/* ====================================================================== */
})();
(function() {
// 簡化 backbone 程序
//
if (typeof _ !== 'function' && typeof Backbone !== 'object') {
return;
} else {
_.mixin({
// Backbone.view.extend()
bbv: function(option) {
var bb = new BackboneExtend();
var view = bb.view(option);
return view;
}
});
_win_included = true;
}
/* ====================================================================== */
function BackboneExtend() {};
(function() {
this.view = function(option) {
var View_class = Backbone.View.extend(option);
var view = new View_class();
// view._class = View_class; view.constructor 可取得
return view;
}
}).call(BackboneExtend.prototype);
/* ====================================================================== */
})();
2017年5月10日 星期三
參考書籍
RWD跨平台響應式網頁設計
HTML5 與 Javascript Web Apps
jQuery 開發實戰
巧用 jQuery
jquery應用程式設計極速上手
邁向jQuery達人的階梯
網頁程式設計的16堂課
HTML5 與 Javascript Web Apps
jQuery 開發實戰
巧用 jQuery
jquery應用程式設計極速上手
邁向jQuery達人的階梯
網頁程式設計的16堂課
2017年5月4日 星期四
php 獲取完整網址
假如網址列是http://www.kimo.com.tw/test.php?id=20&link=123456
$_SERVER['PHP_SELF']; 是取得 /test.php
$_SERVER['QUERY_STRING']; 是取得 ?id=20&link=123456
$_SERVER['HTTP_HOST']; 是取得 www.kimo.com.tw
$_SERVER["REQUEST_URI"] 會給檔名 + 參數 (如 /tw/show/rating?userID=tata3055)
$_SERVER的參數和用法說明
$_SERVER['PHP_SELF'] #當前正在執行腳本的文件名,與 document root相關。
$_SERVER['argv'] #傳遞給該腳本的參數。
$_SERVER['argc'] #包含傳遞給程序的命令行參數的個數(如果運行在命令行模式)。
$_SERVER['GATEWAY_INTERFACE'] #服務器使用的 CGI 規範的版本。例如,「CGI/1.1」。
$_SERVER['SERVER_NAME'] #當前運行腳本所在服務器主機的名稱。
$_SERVER['SERVER_SOFTWARE'] #服務器標識的字串,在響應請求時的頭部中給出。
$_SERVER['SERVER_PROTOCOL'] #請求頁面時通信協議的名稱和版本。例如,「HTTP/1.0」。
$_SERVER['REQUEST_METHOD'] #訪問頁面時的請求方法。例如:「GET」、「HEAD」,「POST」,「PUT」。
$_SERVER['QUERY_STRING'] #查詢(query)的字符串。
$_SERVER['DOCUMENT_ROOT'] #當前運行腳本所在的文檔根目錄。在服務器配置文件中定義。
$_SERVER['HTTP_ACCEPT'] #當前請求的 Accept: 頭部的內容。
$_SERVER['HTTP_ACCEPT_CHARSET'] #當前請求的 Accept-Charset: 頭部的內容。例如:「iso-8859-1,*,utf-8」。
$_SERVER['HTTP_ACCEPT_ENCODING'] #當前請求的 Accept-Encoding: 頭部的內容。例如:「gzip」。
$_SERVER['HTTP_ACCEPT_LANGUAGE']#當前請求的 Accept-Language: 頭部的內容。例如:「en」。
$_SERVER['HTTP_CONNECTION'] #當前請求的 Connection: 頭部的內容。例如:「Keep-Alive」。
$_SERVER['HTTP_HOST'] #當前請求的 Host: 頭部的內容。
$_SERVER['HTTP_REFERER'] #鏈接到當前頁面的前一頁面的 URL 地址。
$_SERVER['HTTP_USER_AGENT'] #當前請求的 User_Agent: 頭部的內容。
$_SERVER['REMOTE_ADDR'] #正在瀏覽當前頁面用戶的 IP 地址。
$_SERVER['REMOTE_HOST'] #正在瀏覽當前頁面用戶的主機名。
$_SERVER['REMOTE_PORT'] #用戶連接到服務器時所使用的端口。
$_SERVER['SCRIPT_FILENAME'] #當前執行腳本的絕對路徑名。
$_SERVER['SERVER_ADMIN'] #管理員信息
$_SERVER['SERVER_PORT'] #服務器所使用的端口
$_SERVER['SERVER_SIGNATURE'] #包含服務器版本和虛擬主機名的字符串。
$_SERVER['PATH_TRANSLATED'] #當前腳本所在文件系統(不是文檔根目錄)的基本路徑。
$_SERVER['SCRIPT_NAME'] #包含當前腳本的路徑。這在頁面需要指向自己時非常有用。
$_SERVER['REQUEST_URI'] #訪問此頁面所需的 URI。例如,「/index.html」。
$_SERVER['PHP_AUTH_USER'] #當 PHP 運行在 Apache 模塊方式下,並且正在使用 HTTP 認證功能,這個變量便是用戶輸入的用戶名。
$_SERVER['PHP_AUTH_PW'] #當 PHP 運行在 Apache 模塊方式下,並且正在使用 HTTP 認證功能,這個變量便是用戶輸入的密碼。
$_SERVER['AUTH_TYPE'] #當 PHP 運行在 Apache 模塊方式下,並且正在使用 HTTP 認證功能,這個變量便是認證的類型。
$_SERVER['PHP_SELF'] #當前正在執行腳本的文件名,與 document root相關。
---------------------------------------------------------------------------------------------------------
$_SERVER['HTTP_HOST']
$_SERVER['REQUEST_URI']
$_SERVER['PHP_SELF']
$_SERVER['QUERY_STRING']
假設我們的網址是 http://www.wibibi.com/test.php?tid=333
則以上 $_SERVER 分別顯示結果會是
echo $_SERVER['HTTP_HOST']; //顯示 www.wibibi.com
echo $_SERVER['REQUEST_URI']; //顯示 /test.php?tid=222
echo $_SERVER['PHP_SELF']; //顯示 /test.php
echo $_SERVER['QUERY_STRING']; //顯示 tid=222
透過這幾個 $_SERVER,我們已經取得了網址的各個部分,接著就是把網址給組合起來
$_SERVER['PHP_SELF']; 是取得 /test.php
$_SERVER['QUERY_STRING']; 是取得 ?id=20&link=123456
$_SERVER['HTTP_HOST']; 是取得 www.kimo.com.tw
$_SERVER["REQUEST_URI"] 會給檔名 + 參數 (如 /tw/show/rating?userID=tata3055)
$_SERVER的參數和用法說明
$_SERVER['PHP_SELF'] #當前正在執行腳本的文件名,與 document root相關。
$_SERVER['argv'] #傳遞給該腳本的參數。
$_SERVER['argc'] #包含傳遞給程序的命令行參數的個數(如果運行在命令行模式)。
$_SERVER['GATEWAY_INTERFACE'] #服務器使用的 CGI 規範的版本。例如,「CGI/1.1」。
$_SERVER['SERVER_NAME'] #當前運行腳本所在服務器主機的名稱。
$_SERVER['SERVER_SOFTWARE'] #服務器標識的字串,在響應請求時的頭部中給出。
$_SERVER['SERVER_PROTOCOL'] #請求頁面時通信協議的名稱和版本。例如,「HTTP/1.0」。
$_SERVER['REQUEST_METHOD'] #訪問頁面時的請求方法。例如:「GET」、「HEAD」,「POST」,「PUT」。
$_SERVER['QUERY_STRING'] #查詢(query)的字符串。
$_SERVER['DOCUMENT_ROOT'] #當前運行腳本所在的文檔根目錄。在服務器配置文件中定義。
$_SERVER['HTTP_ACCEPT'] #當前請求的 Accept: 頭部的內容。
$_SERVER['HTTP_ACCEPT_CHARSET'] #當前請求的 Accept-Charset: 頭部的內容。例如:「iso-8859-1,*,utf-8」。
$_SERVER['HTTP_ACCEPT_ENCODING'] #當前請求的 Accept-Encoding: 頭部的內容。例如:「gzip」。
$_SERVER['HTTP_ACCEPT_LANGUAGE']#當前請求的 Accept-Language: 頭部的內容。例如:「en」。
$_SERVER['HTTP_CONNECTION'] #當前請求的 Connection: 頭部的內容。例如:「Keep-Alive」。
$_SERVER['HTTP_HOST'] #當前請求的 Host: 頭部的內容。
$_SERVER['HTTP_REFERER'] #鏈接到當前頁面的前一頁面的 URL 地址。
$_SERVER['HTTP_USER_AGENT'] #當前請求的 User_Agent: 頭部的內容。
$_SERVER['REMOTE_ADDR'] #正在瀏覽當前頁面用戶的 IP 地址。
$_SERVER['REMOTE_HOST'] #正在瀏覽當前頁面用戶的主機名。
$_SERVER['REMOTE_PORT'] #用戶連接到服務器時所使用的端口。
$_SERVER['SCRIPT_FILENAME'] #當前執行腳本的絕對路徑名。
$_SERVER['SERVER_ADMIN'] #管理員信息
$_SERVER['SERVER_PORT'] #服務器所使用的端口
$_SERVER['SERVER_SIGNATURE'] #包含服務器版本和虛擬主機名的字符串。
$_SERVER['PATH_TRANSLATED'] #當前腳本所在文件系統(不是文檔根目錄)的基本路徑。
$_SERVER['SCRIPT_NAME'] #包含當前腳本的路徑。這在頁面需要指向自己時非常有用。
$_SERVER['REQUEST_URI'] #訪問此頁面所需的 URI。例如,「/index.html」。
$_SERVER['PHP_AUTH_USER'] #當 PHP 運行在 Apache 模塊方式下,並且正在使用 HTTP 認證功能,這個變量便是用戶輸入的用戶名。
$_SERVER['PHP_AUTH_PW'] #當 PHP 運行在 Apache 模塊方式下,並且正在使用 HTTP 認證功能,這個變量便是用戶輸入的密碼。
$_SERVER['AUTH_TYPE'] #當 PHP 運行在 Apache 模塊方式下,並且正在使用 HTTP 認證功能,這個變量便是認證的類型。
$_SERVER['PHP_SELF'] #當前正在執行腳本的文件名,與 document root相關。
---------------------------------------------------------------------------------------------------------
$_SERVER['HTTP_HOST']
$_SERVER['REQUEST_URI']
$_SERVER['PHP_SELF']
$_SERVER['QUERY_STRING']
假設我們的網址是 http://www.wibibi.com/test.php?tid=333
則以上 $_SERVER 分別顯示結果會是
echo $_SERVER['HTTP_HOST']; //顯示 www.wibibi.com
echo $_SERVER['REQUEST_URI']; //顯示 /test.php?tid=222
echo $_SERVER['PHP_SELF']; //顯示 /test.php
echo $_SERVER['QUERY_STRING']; //顯示 tid=222
透過這幾個 $_SERVER,我們已經取得了網址的各個部分,接著就是把網址給組合起來
$URL='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
echo $URL;
這樣就可以順利取得現在的網址囉!這只是個簡單的範例而已,如果網址結構較為複雜,可以調用更多的 $_SERVER 來取得詳細的部分,請參考 php.net 的 $_SERVER 介紹。echo $URL;
PHP:$_SERVER - Manual
---------------------------------------------------------------------------------------------------------
#測試網址: http://localhost/blog/testurl.php?id=5
//獲取域名或主機地址
echo $_SERVER['HTTP_HOST']."<br>"; #localhost
//獲取網頁地址
echo $_SERVER['PHP_SELF']."<br>"; #/blog/testurl.php
//獲取網址參數
echo $_SERVER["QUERY_STRING"]."<br>"; #id=5
//獲取用戶代理
echo $_SERVER['HTTP_REFERER']."<br>";
//獲取完整的url
echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
#http://localhost/blog/testurl.php?id=5
//包含端口號的完整url
echo 'http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
#http://localhost:80/blog/testurl.php?id=5
//只取路徑
$url='http://'.$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"];
echo dirname($url);
#http://localhost/blog
---------------------------------------------------------------------------------------------------------
function full_url() {
// https ??
$s = '';
if (!empty($_SERVER['HTTPS'])) {
if ($_SERVER['HTTPS'] == 'on') {
$s = 's';
}
}
$index = strpos(strtolower($_SERVER['SERVER_PROTOCOL']), '/');
$protocol = substr(strtolower($_SERVER['SERVER_PROTOCOL']), 0, $index) . $s;
// port
$port = '';
if ($_SERVER['SERVER_PORT'] != '80') {
$port = sprintf(':%s', $_SERVER['SERVER_PORT']);
}
$res = $protocol.'://' . $_SERVER['SERVER_NAME'].$port.$_SERVER['REQUEST_URI'];
return $res;
}
2017年5月3日 星期三
(codeIgniter)筆記
網頁緩衝 >>
寫在 controller
$this>output>cache(5);
-----------------------------------------------------------------------
路由 >>
$route['test/([a-zA-Z]+)/\\1'] = 'test_2/classTest';
url(test/a/a) => 'test_2/classTest';
$route['test/\w+/\w+/(.*)'] = 'test_2/classTest/$1'; ($1區塊為收到的參數)
test1/5/6/..... => 'test_2/classTest/$1'
$route['test/\w+/\w+/(:any)'] = 'test_2/classTest/$1'; ($1區塊為收到的參數)
test1/5/6/..... => 'test_2/classTest/$1'
寫在 controller
$this>output>cache(5);
-----------------------------------------------------------------------
路由 >>
$route['test/([a-zA-Z]+)/\\1'] = 'test_2/classTest';
url(test/a/a) => 'test_2/classTest';
$route['test/\w+/\w+/(.*)'] = 'test_2/classTest/$1'; ($1區塊為收到的參數)
test1/5/6/..... => 'test_2/classTest/$1'
$route['test/\w+/\w+/(:any)'] = 'test_2/classTest/$1'; ($1區塊為收到的參數)
test1/5/6/..... => 'test_2/classTest/$1'
訂閱:
文章 (Atom)