2015-10-19 59 views
2

我正在閱讀Meteor示例應用程序「todos」以進行學習。示例Todos應用程序中定義的全局大寫變量是什麼?

他們使用一些全部大寫var並將它們存儲在Session中。
它在第一行定義:

var EDITING_KEY = 'EDITING_TODO_ID'; 

而且多次使用。例如:

Template.todosItem.helpers({ 
    //... 
    editingClass: function() { 
    return Session.equals(EDITING_KEY, this._id) && 'editing'; 
    } 
}); 
Template.todosItem.events({ 
    'blur input[type=text]': function(event) { 
    if (Session.equals(EDITING_KEY, this._id)) 
     Session.set(EDITING_KEY, null); 
    }, 
//... 
}); 

這是什麼,什麼特別之處?

回答

3

EDITING_KEY是一個文件範圍的「恆定」在用於參考當前編輯的項目minimongo _id在全球活性持久客戶端字典Sessiontodos-item.js定義。
它用於避免必須一遍又一遍地寫入相同的字符串,在這種情況下'EDITING_TODO_ID'。在任何地方寫入都可能導致由於錯誤導致的錯誤導致的愚蠢錯誤,如您的模板未更新,因爲您寫的是'EDITNG'而不是'EDITING'

由於Session只需要一個字符串作爲第一個參數,這兩條線路做同樣的事情:

Session.get(EDITING_KEY) 
Session.get('EDITING_TODO_ID') 

示例項目使用此多次,以避免錯誤,並讓自動完成更好。
你可以看到在其他文件中有一些更多的例子,如在app-body.js頂部:

var MENU_KEY = 'menuOpen'; 
Session.setDefault(MENU_KEY, false); 

var USER_MENU_KEY = 'userMenuOpen'; 
Session.setDefault(USER_MENU_KEY, false); 

var SHOW_CONNECTION_ISSUE_KEY = 'showConnectionIssue'; 
Session.setDefault(SHOW_CONNECTION_ISSUE_KEY, false); 

你可以進一步去定義那些在全球關鍵的註冊表,將確保沒有重複鍵,用於例如底層Set。培訓可能是一件有趣的事情。

由於Meteor現在支持ES2015,所以應該將其重寫爲const EDITING_KEY = 'EDITING_TODO_ID'以避免意外覆蓋它。

0

這看起來只是一個跟蹤當前正在編輯的工作的變量。沒有什麼特別的,它是全能的。