這篇文章主要介紹了Backbone.js的一些使用技巧,Backbone.js是一款人氣JavaScript庫,需要的朋友可以參考下
自從3年前Backbone.js發布第一版以來,Backbone.js就成為一個流行的開源JavaScript “MV*”框架,并獲得人們的青睞。盡管Backbone.js給JavaScript應用提供了框架,但是它仍然給開發者留有很多設計模式供選擇,不管怎樣,當開發者第一次使用Backbone.js時還會產生很多普遍的問題的。
因此,在這篇文章中,我們將介紹很多不同的設計模式供你在Backbone.js應用中使用,而且我們也會一同來看看對于開發者來說會產生很多普遍的有關性能伸縮的問題。
對象深度拷貝
JavaScript對待所有原生類型變量是傳值。所以,當變量被引用時就傳遞了變量的值。
?
1 2 var helloWorld = “Hello World”; var helloWorldCopy = helloWorld;舉個例子,上面的代碼將變量helloWorldCopy的值設置為變量helloWorld的值。這樣, 自從它的值被復制之后,所有修改helloWorldCopy的值不會修改helloWorld的值。JavaScript對待所有非原始類型的變量時傳引用,這就意味著當變量傳遞的時候將會傳遞內存地址引用。
?
1 2 3 4 var helloWorld = { ‘hello': ‘world' } var helloWorldCopy = helloWorld;舉個例子,上面的代碼將設置helloWorldCopy為helloWorld的引用,而且,也許你會猜到任何修改helooWorldCopy的值都會直接導致helloWorld值的變化。如果你想要helloWorld的拷貝,你可以創建一個拷貝對象即可。
也許你會想到“為什么Backbone.js可以解釋為所有的工作都是通過傳遞引用?”事實上,Backbone.js不會拷貝對象,這將意味著如果你從模型里調用.get()方法獲得一個對象,任何給這個對象的修改都會直接修改原來的對象。讓我們一起來看一個例子來闡明哪里會發生這樣的情況。如果你有個如下的Person模型:
?
1 2 3 4 5 6 7 8 9 10 11 var Person = Backbone.Model.extend({ defaults: { 'name': 'John Doe', 'address': { 'street': '1st Street' 'city': 'Austin', 'state': 'TX' 'zipCode': 78701 } } });這樣你就創建了一個新的person對象:
?
1 2 3 var person = new Person({ 'name': 'Phillip W' });現在我們來對新對象的一些屬性進行操作操作:
person.set('name', 'Phillip W.', { validate: true });
上面的代碼成功的給person對象的name屬性賦了值?,F在我們在來操作person對象的地址屬性。當然,在我們這樣做之前先驗證一下地址屬性。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 var Person = Backbone.Model.extend({ validate: function(attributes) { if(isNaN(attributes.address.zipCode)) return "Address ZIP code must be a number!"; }, defaults: { 'name': 'John Doe', 'address': { 'street': '1st Street' 'city': 'Austin', 'state': 'TX' 'zipCode': 78701 } } });新聞熱點
疑難解答