
186
|
第十一章
var tasks = Tasks.init({el: $("#tasks")});
assertEqual( tasks.el.attr("id"), "tasks" );
在控制器內部,可以透過這組元件來添加模版內容、產生檢視器內容:
window.Tasks = Spine.Controller.create({
init: function(){
this.el.html(" 產生一段文字訊息 ");
}
});
var tasks = Tasks.init();
$("body").append(tasks.el);
所有傳進
init()
的參數,都會成為控制器的屬性。如下:
var tasks = Tasks.init({item: Task.first()});
assertEqual( Task.first(), tasks.item );
代理器函式
不知你是否有注意到,前面有些範例程式,會把事件的回叫函式放進
this.proxy()
裡
面,藉此確保在執行這些函式時,能採用正確的執行環境。由於這是很常見的手法,因
此 Spine 特別提供了一種較簡潔的做法:
proxied
。只要在控制器裡新增一組
proxied
屬
性值,並且在裡面設定一組存放函式名稱的陣列,就能將這些函式的執行環境調整成和
控制器一致:
// 相當於使用 proxyAll
var Tasks = Spine.Controller.create({
proxied: ["render", "addAll"], ...