在上一篇 [筆記] 親手打造屬於你自己的 JavaScript Framework/Library(中),我們初步建立了好了自己的 framework ,並且可以成功運用它。最後,我們要來試著讓我們所做的 Framework 和 jQuery 做更多的結合,並且開始應用它。
我們的目標是希望能夠利用我們所做的這個 library 做一個簡單的登入呈現頁面,現在就讓我開始吧!
HTML部分
首先 HTML 的部分我們先寫一個很簡單的登入視窗,像是這樣:
<body>
<div id="app">
<div id="login">
<select id='Lang'>
<option value="en" selected>English</option>
<option value="zh">中文</option>
</select>
<button>登入</button>
</div>
<h1 id="logMsg"></h1>
</div>
<script src="jquery-3.1.1.js"></script>
<script src="greetr.js"></script>
<script src="app.js"></script>
</body>
JS 部分(greetr.js)
接下來,我們要在之前做的 Library 中加入 jQuery 的方法,一樣放在 Greetr.prototype 裡面,我們加入一個方式叫做 greetHTML ,這個方法可以直接幫我們把 greet 輸出的文字,寫入 HTML 當中:
greetHTML: function(selector, formal) {
if (!$) throw "jQuery not loaded";
if (!selector) throw "no seletor";
let msg = "";
if (formal) {
msg = this.formalGreeting();
} else {
msg = this.greeting();
};
$(selector).html(msg);
return this;
}
於是我們就做好我們的 Library 了,順便把完整的 Library Code (greetr.js) 放一份在下面:
; (function(global, $) { var Greetr = function(firstname, lastname, language) { return new Greetr.init(firstname, lastname, language); } let supportedLangs = ['en', 'zh']; let greetings = { en: 'Hello', zh: '你好' }; let formalGreetings = { en: 'Greetings', zh: '您好' }; let logMessages = { en: 'Logged', zh: '登入' }; Greetr.prototype = { fullName: function() { return this.firstname + ' ' + this.lastname; }, validate: function() { if (supportedLangs.indexOf(this.language) === -1) { throw 'Invalid Language'; } }, greeting: function() { return greetings[this.language] + ' ' + this.firstname; }, formalGreeting: function() { return formalGreetings[this.language] + ', ' + this.fullName(); }, greet: function(formal) { let msg; // if undefined or null, it will coerced to 'false' if (formal) { msg = this.formalGreeting(); } else { msg = this.greeting(); } if (console) { console.log(msg); } // 'this' refers to the calling object at execution time // makes method chainable return this; }, log: function() { if (console) { console.log(logMessages[this.language] + ' ' + this.fullName()); } return this; }, setLang: function(lang) { this.language = lang; this.validate(); return this; }, greetHTML: function(selector, formal) { if (!$) throw "jQuery not loaded"; if (!selector) throw "no seletor"; let msg = ""; if (formal) { msg = this.formalGreeting(); } else { msg = this.greeting(); }; $(selector).html(msg); return this; } }; Greetr.init = function(firstname, lastname, language) { let self = this; self.firstname = firstname || ''; self.lastname = lastname || ''; self.language = language || 'zh'; self.validate(); } Greetr.init.prototype = Greetr.prototype; global.Greetr = global.G$ = Greetr; }(window, jQuery))
接著,我們就可以實際應用我們的 Library 了。
Library 應用(app.js)
實際應用的時候,我們會寫在另外一支 app.js 中,現在我們希望當我按下登入之後,就會在網頁上出現打招呼,因此,我們可以在 app.js 中這樣寫:
$('#login').on('click', 'button', function() {
let pj = G$("Po-Jung", "Chen");
pj.setLang($("#Lang").val()).greetHTML('#logMsg', true);
})
透過這樣的方式,當我們按下按鈕之後,就會出現相對應的打招呼文字:
看起來是相當簡單的原理,但只要再加上一些 CSS 的修飾,就可以是一個相當出色的登入頁面,可以參考看看這個頁面!
→回到此系列文章目錄
0 意見:
張貼留言